2014-02-06 4 views
3

나는 Qbasic에서 미로를 만들려고 노력하고있다. 그러나 포인터가 미로 라인에 닿으면 프로그램이 끝나지 않는다. 사전에Qbasic에서 원이 어떻게 만져서 프로그램을 종료 할 수 있습니까?

cls 
screen 12 
DIM p AS STRING 
DIM A1 AS STRING 
15 print"What do you want to do?" 
print"A:Draw AN IMAGE"," B:PLAY A MAZE GAME"; 
PRINT 
PRINT"TYPE 'A' OR 'B'IN CAPITAL FORM" 
GOTO 102 
99 print "rules to play the maze game:" 
print 
print "1 use 'W' to move the ball foward" 
print "2 use 'S' to move the ball backward" 
print "3 use 'A' to move the ball leftward" 
print "4 use 'D' to move the ball rightward" 
INPUT A1 
CLS 
goto 10 

102 INPUT P 
if p="A"then 
cls 
goto 20 
elseif p="B" then 
cls 
goto 99 
elseif p<>"A" AND p<>"B" then 
print "Choose between A and B" 
GOTO 70 
end if 


10 pset(120,120) 
draw "r100" 
pset (120,140) 
draw"r80" 
pset (200,140) 
draw "d100" 
pset (220,120) 
draw"d140" 
pset (220,260) 
draw "l90" 
pset (200,240) 
draw "l50" 
pset (130,260) 
draw"u50l120u90r60u40l50u60r300d90l35d260l60d30l80 
h20l20h20u30r40u5l70d60f40r250u90h40u45r40u40r50u130h40r225d65l50d60l15 
d130l40d50l20d15r45d40r20u45r10u10r10u90r100" 

pset(150,240) 
draw"u50l120u50r60u80l50u20r260d50l35d260l60d30l40h20l20h10r 
40u50l120d98f50r290u115h40u20r40u40r50u160h10r140d20l50d60l15 
d130h40d90l20d60r45d45r70u45r10u10r10u90r75" 

20 dim k as string 
x = 110 
y = 105 
do 
k = ucase$(inkey$) 
if k="W"then 

y = y - 2 

elseif k= "S" then 

y = y + 8 

elseif k="A"then 

x = x - 8 

elseif k="D" then 

x = x + 5 

end if 
circle (x,y),7,10 
loop until k ="Q" 
GOTO 45 
70 CLS 
GOTO 15 
if x=120 and y=120 then goto 45 
40 cls 

45 END 

Pls는 도움말

감사합니다 - : 나는 원 (포인터 인) 미로의 끝을 접촉 할 때 다음 프로그램이 end.The 프로그램으로 이동해야 할 것은 이것이다. ...

답변

4

좋아, 이제 당신의 게임 루프 아래에 제시에서 피크를 취할 수 있도록 가독성을 위해 약간의 서식이 다시 :

do 
    k = ucase$(inkey$) 

    if k="W"then 
     y = y - 2 
    elseif k= "S" then 
     y = y + 8 
    elseif k="A"then 
     x = x - 8 
    elseif k="D" then 
     x = x + 5 
    end if 

    circle (x,y),7,10 
loop until k ="Q" 

귀하의 승리 케이스 (X = 120, Y = 120 경우 것은 다음 고토 45) 아무튼 't a ctually 루프 내에서 발생하지만 그 바깥 쪽.

do loops을 사용하면 "until"문이 true를 반환하지 않는 한 do 및 loop 문 사이의 코드 만 실행됩니다. 순서대로 :

do 
    'This code will execute 
loop until k = "Q" 
    'This code will only execute after k=Q 

do 루프에 승리 사례를 넣으면 제대로 작동합니다.

올바르게 기억한다면 QBasic은 줄의 시작 부분에있는 공백을 허용합니다. 공백을 사용하여 코드를 시각적으로 구성하여 진행 상황을 볼 수 있도록하는 것이 좋습니다. 기본 루프의 형식을 확인하십시오. do 루프가 제어하는 ​​모든 것은 do 및 loop 문의 오른쪽에 탭으로 표시됩니다. 이렇게하면 루프가 무엇을하는지 쉽게 볼 수 있습니다. if 문에있는 모든 내용이 비슷한 이유로 처리됩니다.

코드를 들여 쓰기하는 습관이 생기면 코드의 논리가 깔끔하게 표시되는지 확인할 수 있습니다.

편집 : 프로그래밍을 처음 사용하신 것 같습니다. QBasic보다는 codecademy를 ​​통해 Python을 배우는 것이 좋습니다. QBasic은 goto 문과 같은 매우 나쁜 습관을 권장합니다.