Помогите в разборе программы.
|
|
Gamer6890 | Дата: Пятница, 13 Ноября 2015, 05:05 | Сообщение # 1 |
частый гость
Сейчас нет на сайте
| Делал пример с книги по бейсику, нужно было сделать программу "Угадайка", где рандомно выбирается число, а пользователь должен его угадать, есть даже подсказки, "Правильное число больше, меньше" Вообщем в чем проблема, Списав с образца весь код изменив только названия переменных я запустил программу, но при угадывании числа должна выходить надпись, "Вы угадали число (число) с ... попытки" но всегда попыток ноль. Прошу помочь советом, как сделать что бы показывало количество потраченных попыток?
Вот образец, на английском правда.. Код ;demo02-11.bb - Try to guess the number Print "Welcome to the Guessing Game!" AppTitle "Guessing Game!" ;Seed the random generator...don't worry, it willl be explained later SeedRnd MilliSecs()
;Pick a number between 1 and 100 numbertoguess = Rand(1,100)
;The num of guesses the user has used numofguesses = 0
;set the beginning of loop label .loopbegin ;Find out the user's guess guess = Input$("Guess a number ")
;If player guesses outside of range, tell him to guess again If guess > 100 Or guess < 1 Print "Pick a number between 1 and 100, silly!" ;Go back to the beginning Goto loopbegin EndIf ;Add a guess to the guess counter numofguesses = numofguesses + 1
;If the guess is too low, go back to beginning If guess < numbertoguess Then Print "The number was too low." Goto loopbegin ;If guess is too high, go back to the beginning Else If guess > numbertoguess Then Print "The number was too high." Goto loopbegin EndIf
Print "You guessed the number " + numbertoguess + " in " + numofguesses + " tries!"
;Wait five seconds Delay 5000
А вот мой код
Код Print "Добро пожаловать в игру Угадайка" AppTitle "Угадайка" ;Установка генератора случайных чисел.. SeedRnd MilliSecs() ;Выбор числа от 1 до 10 number=Rand(1,25) ;число попыток numofguest=0 ;устанавливаем метку начала цикла .loopbegin ;выясняем какое число ввел пользователь. guest=Input$("Ваше число") ;если игрок не угадал число, он угадывает снова If guest > 25 Or guest < 1 Print "Попробуйте снова" ;возвращаемся в начало программы Goto loopbegin
EndIf
;увеличиваем число использованных попыток игрока numofguest = numofguest + 1 ;если введенное число меньше загаданного переносим игрока в начало цикла If guest < number Then Print "Это число меньше загаданного" Goto loopbegin ;если введенное число больше нужного Else If guest > number Then Print "Это число больше загаданного" Goto loopbegin
EndIf
Print "Вы угадали число" + number + "вы молодец!" + "Вы угадали с" + numofguest + "попыток"
Delay 10000
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Пятница, 13 Ноября 2015, 08:28 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| Привет. Если не секрет, что за книга? В какой среде собирается проект?
|
|
| |
Gamer6890 | Дата: Пятница, 13 Ноября 2015, 08:48 | Сообщение # 3 |
частый гость
Сейчас нет на сайте
| Книга "Программирование игр" Маниш Сети. Изучаешь там бейсик и в конце книги у тебя получается игра типа Вольфейштейна. Пишу в среде Blitz3D, это можно сказать не среда а движок. Если хотите могу дать ссылку на книгу, хотя отсканенна она дерьмово..
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Пятница, 13 Ноября 2015, 09:10 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| Цитата Gamer6890 ( ) Пишу в среде Blitz3D, это можно сказать не среда а движок. Теперь ясно почему, компилятор free basic при сборки проекта выдает ошибки. Если можешь кинуть ссылку на книгу, то спасибо.
|
|
| |
Gamer6890 | Дата: Пятница, 13 Ноября 2015, 09:46 | Сообщение # 5 |
частый гость
Сейчас нет на сайте
| Книга "Программирование на Blitz3D"
Книга очень проста, только отсканирована хреново, но читать можно.
Программирую в среде BlitzBasic
|
|
| |
Gudleifr | Дата: Пятница, 13 Ноября 2015, 13:21 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| Сначала, пардон, посмотрел не туда... Проверьте-ка ограничения на длину имен переменных и меток.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Пятница, 13 Ноября 2015, 13:34 |
|
| |
Gamer6890 | Дата: Пятница, 13 Ноября 2015, 20:47 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| Цитата Gudleifr ( ) Проверьте-ка ограничения на длину имен переменных и меток. А как? Я просто только начал, сегодня еле переварил урок о Массивах..
Программирую в среде BlitzBasic
|
|
| |
Gudleifr | Дата: Пятница, 13 Ноября 2015, 21:27 | Сообщение # 8 |
почти ветеран
Сейчас нет на сайте
| Цитата Gamer6890 ( ) А как? В документации Вашего обезьянника - Blitz3D. Но можно проще - обрезать имена до пары-другой символов.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Пятница, 13 Ноября 2015, 21:28 |
|
| |
Gamer6890 | Дата: Пятница, 13 Ноября 2015, 21:34 | Сообщение # 9 |
частый гость
Сейчас нет на сайте
| Цитата Gudleifr ( ) Но можно проще - обрезать имена до пары-другой символов. Суть понял, спасибо, не знал раньше что есть ограничения на размер переменных..
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Пятница, 13 Ноября 2015, 23:41 | Сообщение # 10 |
частый гость
Сейчас нет на сайте
| По-моему синтаксис который используется в книги уже устарел, и в новых версиях среды blitzmax уже не работает. Поправил код, у меня он работает и выводит количество попыток.
Код Print "Welcome to the Guessing Game!" AppTitle = "Guessing Game!"
SeedRnd MilliSecs()
numbertoguess = Rand(1,100)
numofguesses = 0
#loopbegin
guess = Int(Input$("Guess a number "))
If guess > 100 Or guess < 1 Print "Pick a number between 1 and 100, silly!" Goto loopbegin EndIf numofguesses = numofguesses + 1
If guess < numbertoguess Then Print "The number was too low." Goto loopbegin Else If guess > numbertoguess Then Print "The number was too high." Goto loopbegin EndIf
Print "You guessed the number " + numbertoguess + " in " + numofguesses + " tries!"
Delay 5000
|
|
| |
Gamer6890 | Дата: Пятница, 13 Ноября 2015, 23:48 | Сообщение # 11 |
частый гость
Сейчас нет на сайте
| cann, А я решил свою проблему немного по другому.
Код Print "Добро пожаловать в игру Угадайка" AppTitle "Угадайка" ;Установка генератора случайных чисел.. SeedRnd MilliSecs() ;Выбор числа от 1 до 10 number=Rand(1,25) ;число попыток numofguest=0 ;устанавливаем метку начала цикла .loopbegin ;выясняем какое число ввел пользователь. guest=Input$("Ваше число") ;если игрок не угадал число, он угадывает снова If guest > 25 Or guest < 1 Print "Попробуйте снова" ;возвращаемся в начало программы Goto loopbegin
EndIf
;увеличиваем число использованных попыток игрока numofguest = numofguest + 1 ;если введенное число меньше загаданного переносим игрока в начало цикла If guest < number Then Print "Это число меньше загаданного" numofguest = numofguest + 1 Goto loopbegin ;если введенное число больше нужного Else If guest > number Then Print "Это число больше загаданного" numofguest = numofguest + 1 Goto loopbegin
EndIf
Print "Вы угадали число" + number + "вы молодец!" + "Вы угадали с" + numofguest + "попыток"
Delay 10000 Добавлено (13 ноября 2015, 23:48) ---------------------------------------------
Цитата cann ( ) По-моему синтаксис который используется в книги уже устарел, и в новых версиях среды blitzmax уже не работает Я изучаю именно устаревший синтаксис, по тому что в новом, больше наворотов. А мне нужно выучить язык в краткие сроки, что бы доделать игру до нового года. Да и я не посегаю на грандиозные проекты, хочу делать игры с плохой графикой, типа тек которые были созданы в начале 21 века..
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Пятница, 13 Ноября 2015, 23:56 | Сообщение # 12 |
частый гость
Сейчас нет на сайте
| Хорошо, что работает, но по-моему у тебя количество попыток будет всегда больше действительного на 1 или я ошибаюсь?
|
|
| |
Gamer6890 | Дата: Суббота, 14 Ноября 2015, 00:51 | Сообщение # 13 |
частый гость
Сейчас нет на сайте
| cann, Спасибо за замечание, ты можешь аргументировать свои изменения в коде, так как не могу понять в чем разница кроме int.. Коментариями пометь свои коректировки в коде.
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Суббота, 14 Ноября 2015, 01:37 | Сообщение # 14 |
частый гость
Сейчас нет на сайте
| Алгоритм работы, авторской программы из книги, не изменился.
В строчке, где устанавливается заголовок программы, добавился знак равенства. Было: AppTitle "Guessing Game!" Стало: AppTitle = "Guessing Game!"
В строчке, где устанавливается метка перехода, знак точки изменился на знак решетки. Было: .loopbegin Стало: #loopbegin
В строчке, где пользователь вводит число, вводимое число преобразуется из строки в число. Было: guess = Input$("Guess a number ") Стало: guess = Int(Input$("Guess a number "))
А в остальном все как в книге.
Код с комментариями какие ты просил:
Код Print "Welcome to the Guessing Game!" 'Строка установки заголовка программы, добавлен знак равно AppTitle = "Guessing Game!"
SeedRnd MilliSecs()
numbertoguess = Rand(1,100)
numofguesses = 0 'Строка с меткой перехода, знак точки изменился на знак решетки #loopbegin 'Строка ввода числа пользователя, вводимая строка пользователя преобразуется в число с помощью Int() guess = Int(Input$("Guess a number "))
If guess > 100 Or guess < 1 Print "Pick a number between 1 and 100, silly!" Goto loopbegin EndIf numofguesses = numofguesses + 1
If guess < numbertoguess Then Print "The number was too low." Goto loopbegin Else If guess > numbertoguess Then Print "The number was too high." Goto loopbegin EndIf
Print "You guessed the number " + numbertoguess + " in " + numofguesses + " tries!"
Delay 5000
|
|
| |
Gamer6890 | Дата: Суббота, 14 Ноября 2015, 01:42 | Сообщение # 15 |
частый гость
Сейчас нет на сайте
| cann, Спасибо большое, компилятор только не кушает #loopbegin так что я изменил решетку на точку, но всё работает, хотя я написал практически точную копию.. спасибо за советы... Буду учить массивы....
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Суббота, 14 Ноября 2015, 01:48 | Сообщение # 16 |
частый гость
Сейчас нет на сайте
| Я установил BlitzMax версии 1.50. У тебя какая версия? Может в этом дело, что #loopbegin не понимает.
|
|
| |
Gamer6890 | Дата: Суббота, 14 Ноября 2015, 01:55 | Сообщение # 17 |
частый гость
Сейчас нет на сайте
| cann, У меня не BlitzMax, а среда BlitzBasic. А скорее это не среда а игровой движок. Та книга которую я скидывал в комментариях, именно для разработки на этом движке. Вот ИНФА о движке в википедии.
Программирую в среде BlitzBasic
|
|
| |
cann | Дата: Суббота, 14 Ноября 2015, 01:59 | Сообщение # 18 |
частый гость
Сейчас нет на сайте
| Почитаю, спасибо.
|
|
| |
Gamer6890 | Дата: Суббота, 14 Ноября 2015, 02:05 | Сообщение # 19 |
частый гость
Сейчас нет на сайте
| Цитата cann ( ) Почитаю, спасибо Пожалуйста..
Я начал изучать именно работу на этом двиге по тому что по моему он очень прост, и функционален. Во всех уроках которые я читал, в конце, любой разработчик с прямыми руками может создать вполне играбельный 3д шутер а ля Wolfeishtein. А я задумал создать хоррор от первого лица, с примесью жанра квест.
Программирую в среде BlitzBasic
|
|
| |