1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Новая задачка

Автор: gudleifr · 4 янв 2015 · ·
  1. Для своих статей "про BASIC-программы" пытался придумать пример на ООП.
    Вспомнил, детскую задачку про то, как робот ходил у драконов деньги клянчить.
    [​IMG]
    Т.е. подходил робот к дракону и просил денег, а дракон мог оказаться принадлежащим к классу добрых или нет.
    Показалась удобным концепция наличия у драконов как частных, так и обобщенных признаков.
    Думаю, суть понятна из кода:
    Код:
    100 DIM DR$(26), DN(26), DI(26), DZ(20)
    110 FOR I=1 TO 26: READ DR$(I), DN(I): DI(I)=0: NEXT I
    120 DATA "ТОЛСТЫЙ", 18, "ЗМЕЕВИДНЫЙ", 18
    130 DATA "СИНИЙ", 19, "ЗЕЛЕНЫЙ", 19, "ПУРПУРНЫЙ", 19
    140 DATA "РОЗОВЫЙ", 20, "ЖЕЛТЫЙ", 20, "ОРАНЖЕВЫЙ", 20
    150 DATA "МОРСКОЙ", 21, "РЕЧНОЙ", 21, "БОЛОТНЫЙ", 21
    160 DATA "ГОРНЫЙ", 22, "ПУСТЫННЫЙ", 22, "ПЕЩЕРНЫЙ", 22
    170 DATA "ЗВЕЗДНЫЙ", 23, "ЛУННЫЙ", 23, "ОБЛАЧНЫЙ", 23
    180 DATA "ЛЮБОЙ ФОРМЫ", 0, "ТЕМНЫЙ", 24, "СВЕТЛЫЙ", 24
    190 DATA "ВОДЯНОЙ", 25, "СУХОПУТНЫЙ", 25, "НЕБЕСНЫЙ", 26
    200 DATA "ЛЮБОГО ЦВЕТА", 0, "ЗЕМНОЙ", 26
    210 DATA "ЛЮБОЕ МЕСТО ОБИТАНИЯ", 0
    220 PRINT "Pres any key when you're ready to go" : RN = -32768!
    230 WHILE LEN(INKEY$) = 0: RN = RN + 1: WEND
    240 WHILE RN>32767: RN = RN - 65535!: WEND: RANDOMIZE RN: CLS
    300 Y=1: GOSUB 1000: DI(X1)=1: DI(X2)=1: DI(X3)=1
    310 PRINT"ВИДИМ ДРАКОНА:"
    320 Y=0: GOSUB 1000: PRINT DR$(X1);" ";DR$(X2);" ";DR$(X3) 
    330 INPUT"БУДЕМ ПРОСИТЬ ЗОЛОТА [Y/N]",A$
    340 IF LEFT$(A$,1)="Y" OR LEFT$(A$,1)="y" THEN GOSUB 1100
    350 INPUT"ГОТОВЫ ОПРЕДЕЛИТЬ ДРАКОНА [Y/N]",A$
    360 IF LEFT$(A$,1)="Y" OR LEFT$(A$,1)="y" THEN GOSUB 1200 ELSE 310
    370 IF X=1 THEN PRINT"УРРА-А!": END
    380 PRINT"НЕУДАЧКА!": GOTO 310
    1000 REM СОЗДАНИЕ ДРАКОНА
    1010 I=1: J=2: GOSUB 1050: X1=X
    1020 I=3: J=6: GOSUB 1050: X2=X
    1030 I=9: J=9: GOSUB 1050: X3=X
    1040 RETURN
    1050 X=INT(I+RND(1)*J)
    1060 IF Y=1 THEN IF DN(X)>0 THEN IF RND(1)>0.5 THEN X=DN(X): GOTO 1060
    1070 RETURN
    1100 REM ПРОСЬБА ЗОЛОТА
    1110 X=X1: GOSUB 1160: IF X=0 THEN 1150
    1120 X=X2: GOSUB 1160: IF X=0 THEN 1150
    1130 X=X3: GOSUB 1160: IF X=0 THEN 1150
    1140 PRINT"ДАЛ":RETURN
    1150 PRINT"НЕ ДАЛ":RETURN
    1160 IF X>0 THEN IF DI(X)=0 THEN X=DN(X): GOTO 1160
    1170 RETURN
    1200 REM ОПОЗНАНИЕ
    1210 N=1: I=1: J=2: GOSUB 1330: I=18: J=18: GOSUB 1330
    1220 INPUT"КАКОЙ ФОРМЫ ДРАКОН";X1: X1=DZ(X1)
    1230 N=1: I=3: J=8: GOSUB 1330: I=19: J=20: GOSUB 1330
    1240 I=24: J=24: GOSUB 1330
    1250 INPUT"КАКОГО ЦВЕТА ДРАКОН";X2: X2=DZ(X2)
    1260 N=1: I=9: J=17: GOSUB 1330: I=21: J=23: GOSUB 1330
    1270 I=25: J=26: GOSUB 1330
    1280 INPUT"ГДЕ ЖИВЕТ ДРАКОН";X3: X3=DZ(X3)
    1290 X=0: IF DI(X1)=0 THEN RETURN
    1300 IF DI(X2)=0 THEN RETURN
    1310 IF DI(X3)=0 THEN RETURN
    1320 X=1: RETURN
    1330 FOR K=I TO J: DZ(N)=K: PRINT N;DR$(K): N=N+1
    1340 NEXT K: RETURN
    Но, не суть. Показалась интересной идея не тупого перебора драконов, а угадывания.
    Например, разные характеристики драконов должны иметь разные вероятности, а успешность игрока должна зависеть от умения их оценить "на глаз". (Как известно, человек вполне на такое способен, хотя и уступает в этом деле обезьянам).
    Прикидки показали, что просто после прокрутки (без запроса подтверждения пользователя) всех безуспешных просьб драконов до первой успешной, вполне достаточно для "угадывания класса" с большой долей вероятности.

    В результате эксперимента возник вопрос:
    А есть ли игры, в которых поведение противника случайно (кроме самых классических - шахмат, покера)? Причем, с одной стороны, позволяя игроку примерно оценить вероятность того или иного поведения. А, с другой, настолько случайно, что эти игры не имеют седловой точки и игрок не имеет "лучшего хода", а должен комбинировать свои стратегии случайным образом.
    Простейшие самообучающиеся системы, когда игра меняет вероятности, заметив систему игрока и те случайные игры, в которых случай лишь служит источником неприятностей, не интересны.
    Т.е. не интересуют игры, в которой противник то ли атакует, то ли нет. А интересуют те, в которых игрок, заметив, что противник в 7 случаях из 10 атакует, может извлечь из этого пользу. Например, занимая оборону только в 2/3 случаев, а в 1/3 случаев атакуя сам. И выигрывать по сравнению с атакой в половине случаев (или постоянно обороняясь).
    Лучше, если такая игра будет "без тактической части", чтобы стратегия проявлялась полнее.

Комментарии

  1. gudleifr
    Удалил кучу сообщений коллеги Bato-San, зафлудившего тему вечным вопросом о подмене понятием случайности понятия неполноты информации.
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление