Quick Basic Ping Pong - помогите доделать

Вопросы по Microsoft Quick BASIC (и QBASIC).
sectorz
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 21.05.2007 (Пн) 19:28

Quick Basic Ping Pong - помогите доделать

Сообщение sectorz » 21.05.2007 (Пн) 19:32

Вобщем недавно меня попросили реализовать на QBasic'е игрушку пинг-понг, пришлось вспомнить этот язык и вот что в итоге получилось:

Код: Выделить всё
Kolor = 1 'this is the COLOR for the title `PING-PONG'
CLS
SCREEN 12
PRINT " PING PONG"
PRINT : PRINT
PRINT : PRINT
PRINT "Use the arrow keys to move the"
PRINT "left paddle. If the ball passes the"
PRINT "computer's paddle, you get a point."
PRINT "Whoever gets 10 points first wins."
PRINT : PRINT
INPUT "(V)ery Hard, (H)ard, (M)edium, (E)asy:", sp$
IF sp$ = "H" OR sp$ = "h" THEN sd = 300
IF sp$ = "m" OR sp$ = "M" THEN sd = 500
IF sp$ = "E" OR sp$ = "e" THEN sd = 700
IF sp$ = "V" OR sp$ = "v" THEN sd = 200
IF sd = 0 THEN sd = 1100
INPUT "Press enter to start.", st$
start:
CLS
x = 10: y = 200
x2 = 240: y2 = 200
a = 140: b = 100
d = 0: po1 = 0: po2 = 0
l = 1: r = 0
dr$ = ""
ky:
Kolor = Kolor + 1
IF Kolor > 15 THEN Kolor = 1
COLOR Kolor
LOCATE 1, 1: PRINT "PING-PONG"
COLOR 15
LOCATE 1, 30: PRINT "Your Score:"; p: LOCATE 1, 45: PRINT "Computer's Score:"; p2
a$ = INKEY$
LINE (x, y)-(x + 6, y + 29), 0, BF
IF a$ = CHR$(0) + CHR$(72) THEN y = y - 5: dr$ = "up"
IF a$ = CHR$(0) + CHR$(80) THEN y = y + 5: dr$ = "down"
IF a$ = CHR$(0) + CHR$(75) THEN dr$ = "stop"
IF a$ = CHR$(0) + CHR$(77) THEN dr$ = "stop"
IF a$ = CHR$(27) THEN END
IF dr$ = "up" THEN y = y - 5
IF dr$ = "down" THEN y = y + 5
IF y < 10 THEN y = 10
IF y > 170 THEN y = 170
LINE (x, y)-(x + 6, y + 29), 4, BF
ball:
CIRCLE (a, b), 6, 0
PAINT (a, b), 0
IF a > x2 THEN l = 1: r = 0: RANDOMIZE TIMER: d = INT(RND * 10) - 5: PLAY "l30c"
IF a < x THEN r = 1: l = 0: RANDOMIZE TIMER: d = INT(RND * 10) - 5: PLAY "l30c"
IF l = 1 THEN a = a - 5: b = b + d
IF r = 1 THEN a = a + 5: b = b + d
IF b < 20 THEN b = 20
IF b > 170 THEN b = 170
IF b > y + 15 OR b < y THEN po1 = 1
IF b > y2 + 15 OR b < y2 THEN po2 = 1
GOTO chk
ball2:
CIRCLE (a, b), 6, 1
PAINT (a, b), 1
computer:
LINE (x2, y2)-(x2 + 6, y2 + 29), 4, BF
IF l = 1 THEN GOTO time
LINE (x2, y2)-(x2 + 6, y2 + 29), 0, BF
IF d < 0 THEN y2 = y2 - 6
IF d > 0 THEN y2 = y2 + 6
IF b < y2 THEN y2 = y2 - 6
IF b > y2 + 15 THEN y2 = y2 + 6
IF y2 < 10 THEN dr2$ = "down"
IF y2 > 170 THEN dr2$ = "up"
IF dr2$ = "down" THEN y2 = y2 + 5
IF dr2$ = "up" THEN y2 = y2 - 5
FOR tm = 1 TO sd: NEXT tm
LINE (x2, y2)-(x2 + 6, y2 + 29), 4, BF
time:
FOR tm = 1 TO sd: NEXT tm
GOTO ky:
chk:
IF a > x2 AND po2 = 1 THEN p = p + 1
IF a < x AND po1 = 1 THEN p2 = p2 + 1
IF p = 10 THEN PRINT "YOU WIN": END
IF p2 = 10 THEN PRINT "COMPUTER WINS": END
IF a > x2 AND po2 = 1 THEN GOTO start
IF a < x AND po1 = 1 THEN GOTO start
po2 = 0
po1 = 0
GOTO ball2


Что - то уже полдня немогу сделать чтобы:
при нажатии кнопки влево, ракетка поворачивалась немного против часовой стрелки
при нажатии вправо - немного по часовой стрелке. Это основная проблема, ну и как дополнительная - угол отскока шарика также при этом должен изменяться...

Помогите кодом (или псевдокодом хотя - бы), а то завтра уже должно быть что-то похожее на истину!

P.S.: Жалко нельзя заюзать Cpp+STL+GDI (((

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.05.2007 (Пн) 20:22

А в чём проблема? Не знаешь как нарисовать повёрнутый на определённый угол прямоугольник?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 16:04

Хакер писал(а):А в чём проблема? Не знаешь как нарисовать повёрнутый на определённый угол прямоугольник?
в QBasic ? подскажи пожалуйста: имеется ввиду при помощи четырех LINE или DRAW с математическими замутами по градусам и углам? мне просто интересно :)

автору: а точно стоит юзать RANDOMIZE TIMER по несколько раз за программу?
Последний раз редактировалось Wolfie 22.05.2007 (Вт) 16:07, всего редактировалось 1 раз.
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.05.2007 (Вт) 16:06

Я бы использовал DRAW и заливку.
С LINE пришлось бы принимать меры, чтобы углы были непрерывными.
Lasciate ogni speranza, voi ch'entrate.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 16:31

точно DRAW лучше выбрать и почитать help по QB, и можно будет градусы применять, только вот формулу ведь писать придется неслабую... на всякий случай кусок хелпа по DRAW прямо из самого QB
Код: Выделить всё
DRAW stringexpression$
• stringexpression$    Contains one or more drawing commands; the
                           drawing commands combine many of the capabilities
                           of the other graphics statements (such as LINE and
                           COLOR) into a graphics macro language.
• <Line-Drawing and Cursor-Movement Commands>
   [B]      Move without plotting
   U[n]      Up
   D[n]      Down
   L[n]      Left
   R[n]      Right
   M[{+|-}]x,y   Move to point x,y (or relative move)
   [N]    Plot and return
   E[n]   Diagonally up and right
   F[n]   Diagonally down and right
   G[n]   Diagonally down and left
   H[n]   Diagonally up and left
• <Color, Scale, and Rotation Commands>
   Cn   Change the drawing (foreground) color
      (SCREEN mode determines valid values for 'n')
   Pp,b   Fill enclosed shape that has border color 'b'
      with color 'p'
   Sn   Increase or decrease length of moves (n=4 default)
   An   Rotate (n * 90) degrees, where n = 0, 1, 2, or 3
   TAn   Rotate (0 <= n <= 360) degrees
прямо даже жаль, что в Вб нет такого оператора :lol:
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.05.2007 (Вт) 16:39

Какая еще сложная формула?
U10R90D10L90?
Lasciate ogni speranza, voi ch'entrate.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 17:01

alibek все, я видать вопрос не понял - автору ее просто на 45° надо постваить при клике а потом обратнов вернуть...
я подумал о постепенном вращении, ну вроде чем больше кликов влево тем рокетка больше угол делает...
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.05.2007 (Вт) 17:51

Wolfie
Такое впечатление что ты учишься... в клаее с шестом. Ибо должен знать ты, что такое полярные координаты. И никакой нехилой формулы не будет. Я уже сто раз выкладывал пример вращения фигур на произвольный угол. Щас посмотрю в аттачах и дам ссылку. Более того - я могу точно сказать, что и приведённый там способ - далеко не идеальный.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 17:56

Хакер
там или в 9 и был QB, это раз, а два это только мое хобби ВООБЩЕ никак не связанное с моим образованием и специальностью, + VB я вообще не изучал нигде специально, и мне не приходилось ничего слышать ни о полярных координатах ни о старших-младших битах и стаках (на будущее) etc., так что я бы реализовал это как раз "неслабой формулой" потрудившись над ней часок, ктому же понятие "неслабый" у нас разнится, я думаю :? выкладывай если найдешь, я посмотрю, пополню свою knowledge base
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.05.2007 (Вт) 18:08

Wolfie писал(а):Хакер
там или в 9 и был QB, это раз,

ы? "Либо сегодня среда, либо на лошадь скачет"...

И причём тут QB? Полярные координаты - это не QB. Это математика.


Wolfie писал(а):[а два это только мое хобби ВООБЩЕ никак не связанное с моим образованием и специальностью,

У меня это тоже было хобби'ем, до поры до времени.

Wolfie писал(а):VB я вообще не изучал нигде специально, и мне не приходилось ничего слышать ни о полярных координатах ни о старших-младших битах и стаках (на будущее) etc

Не изучал VB говоришь?
но полярные координаты это не VB - это математика
биты - это тоже не VB - это общие сведения о цифровой электронике
стаки (гы :lol: , вобще то стеки, но это ничего - бывло ещё их стёками называли) - это даже не то что не VB, это ведь выходит за рамки компьютера. Со стеками в жизни ты встречаешься постоянно.



Wolfie писал(а):выкладывай если найдешь, я посмотрю, пополню свою knowledge base



http://bbs.vbstreets.ru/download.php?id=3598
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 18:53

Еще кое-что в коде: не лучше ли делать
вместо
Код: Выделить всё
INPUT "(V)ery Hard, (H)ard, (M)edium, (E)asy:", sp$
IF sp$ = "H" OR sp$ = "h" THEN sd = 300
IF sp$ = "m" OR sp$ = "M" THEN sd = 500
...
так
Код: Выделить всё
INPUT "(V)ery Hard, (H)ard, (M)edium, (E)asy:", sp$
Sp$=UCase$(Sp$)
IF sp$ = "M" THEN sd = 500
IF sp$ = "H" THEN sd = 300
...
? я правдо не претендую на истину в последней инстанции, а спрашиваю )

[оффтоп очередной]
Кстати, шеста у меня в классе нет, не заню чего тебе так показалось :lol:
Хакер писал(а):Не изучал VB говоришь?
но полярные координаты это не VB - это математика
биты - это тоже не VB - это общие сведения о цифровой электронике
стаки ...- это даже не то что не VB, это ведь выходит за рамки компьютера. Со стеками в жизни ты встречаешься постоянно.
Я намекал тебе тонко, что вся область информатики, связанная с математикой, более углубленным программированием и цифровой эллектроникой меня не интересовала, и я ее не касался, и касаться не собираюсь, пока. И в жизни я сталкиваюсь со "стуками", "стеклами" и "стенами", но не со стеками! :D
Хакер писал(а):полярные координаты это не VB - это математика
Кстати не нужно повторять дважды одно и тоже в одном посте, или ты уже решил что я на уровне детского сада :D пока пост писал?
Хакер писал(а):http://bbs.vbstreets.ru/download.php?id=3598
ок, спасибо, я посмтрю.

Кстати, по многим из твоих постов вообще выходит что на форум заглянул не программист, а просто блуждающий по сети человек с желанием поговорить ни о чем :P но никого это я заметил не волнует обычно. так что лучше все же не оффтопить нам здесь понапрасну.
[/оффтоп очередной]
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _


Вернуться в Quick BASIC

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList