Для своих статей "про BASIC-программы" пытался придумать пример на ООП.
Вспомнил, детскую задачку про то, как робот ходил у драконов деньги клянчить.
Т.е. подходил робот к дракону и просил денег, а дракон мог оказаться принадлежащим к классу добрых или нет.
Показалась удобным концепция наличия у драконов как частных, так и обобщенных признаков.
Думаю, суть понятна из кода:
Но, не суть. Показалась интересной идея не тупого перебора драконов, а угадывания.Код: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 случаев атакуя сам. И выигрывать по сравнению с атакой в половине случаев (или постоянно обороняясь).
Лучше, если такая игра будет "без тактической части", чтобы стратегия проявлялась полнее.
-
Скрыть объявление
Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.
-
Скрыть объявлениеЕсли Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.
Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
- Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
- Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
- Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
- Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
С уважением, администрация форума Old-Games.RU
Комментарии
Сортировать комментарии по