PDA

Просмотр полной версии : Turbo basic



assis2007
29.11.2008, 20:21
игра на турбо бейсике. Смысл игры в том что имеется игровое поле состоящее из N дорожек на каждой по М фишек. На каждой дорожке по краям находятся фишки соперников(компьютер и человек). Ходить можно взад и вперёд не более чем на К фишек. я тут написал прогу но почему то отчасти не работает как надо клавиши при переходе с дорожки на дорожку. почему не пойму


screen 12
cls
randomize timer

keyup$ = chr$(0) + chr$(72)
keydown$=chr$(0) + chr$(80)
keyleft$=chr$(0) + chr$(75)
keyright$=chr$(0) +chr$(77)
keyent$=chr$(13)
keyesc$=chr$(27)

dim x1ch(20),x2ch(20)
dim y1ch(20),y2ch(20)
dim x1komp(20),x2komp(20)
dim y1komp(20),y2komp(20)
dim x1(20),x2(20),y1(20),y2(20),u(20),w(20)

fomin:
cls
color 4,8
locate 10,35,0
print "start"
locate 12,35,0
print "Pravila"
locate 14,35,0
print "Exit"
curpos =1
draw "c4 bm270,142 r43 d19 l43 u19"
do
prkey$=inkey$
select case prkey$
case keyent$
if curpos =1 then
gosub start
gosub fomin
elseif curpos = 2 then
gosub rules
gosub fomin
else
goto 1
end if
case keyup$
gosub movecursorup
if (curpos >1) then
curpos=curpos -1
else
curpos =4
end if
case keydown$
gosub movecursordown
if(curpos<4) then
curpos =curpos+1
else
curpos=1
end if
case keyesc$
goto 1
end select
loop until ((prkey$=keyent$) or (prkey$= keyesc$))
return
1
end

movecursorup:
select case curpos
case 1
draw "c1 bm270,142 r43 d19 l43 u19"
case 2
draw "c1 bm270,173 r59 d19 l59 u19"
draw "c4 bm270,142 r43 d19 l43 u19"
case 3
draw "c1 bm270,204 r43 d19 l43 u19"
draw "c4 bm270,173 r59 d19 l59 u19"
case 4
draw "c4 bm270,204 r43 d19 l43 u19"
end select
return

movecursordown:
select case curpos
case 1
draw "c1 bm270,142 r43 d19 l43 u19"
draw "c4 bm270,173 r59 d19 l59 u19"
case 2
draw "c1 bm270,173 r59 d19 l59 u19"
draw "c4 bm270,204 r43 d19 l43 u19"
case 3
draw "c1 bm270,204 r43 d19 l43 u19"
case 4
draw "c4 bm270,142 r43 d19 l43 u19"
end select
return

rules:
cls
print "PRAVILA"
print "igra 'NA DOROGKAH' "
print "Igraut dvoe. Imeetsa neskolko dorogek.Na kagdoi dorogke nahoditsa odinakovoe kolichestvo fishek"
print "Hod sostoit v tom, chto igrok peredvigaet fishky na ne bolee chem maksimalniy hod"
print "Hodi delaut poocheredno do teh por,"
print "poka igroky chei hod seichas ne kyda peredvinyt fishky na lyboi dorogke"
print "Pobeditelem schitaetsa igrok, sdelavshii poslednii hod."
print" "
print "Dlya peremeshenia kursora v menu ispolzuyt strelki vverh i vniz"
print "dlya vibora punkta menu ispolzuyt klavishu ENTER"
print "Dlya peremeshenia fishki v igre ispolzuyt strelki vlevo ,vpravo,vniz,vverh"
print "chtoby sdelat hod nado nagat ENTER"
delay 35
return

start:
cls
n=2
m=7
p=2
gosub pole
print "Hotite izmenit nastroiki?"
do
print "1-da,0-net"
input rp
loop until (rp=1) or (rp=0)
if rp=0 then
gosub hod
else
gosub gamech
end if
return

gamech:
do
print "vvedite chislo dorogek:"
input nn
loop until (nn>0) and (nn<6)
n=int(nn)
do
print "vvedite chislo fishek:"
input mm
loop until (mm>2) and (mm<11)
m=int(mm)
do
print "vvedite maksimalnii hod:"
input pp
loop until (pp>0) and (pp<5) and (pp<=m)
p=int(pp)
gosub hod
return

pole:
for j=1 to n step 1
y1[j]=170+20*j
y2[j]=180+20*j
for i=1 to m step 1
x1[i]=250+20*i
x2[i]=260+20*i
line (x1[i],y1[j])-(x2[i],y2[j]),6,bf
next i
next j
for h=1 to n
x1ch[h]=270
y1ch[h]=170+h*20
x2ch[h]=280
y2ch[h]=180+h*20
line(x1ch[h],y1ch[h])-(x2ch[h],y2ch[h]),2,bf
next h
for k=1 to n
x1comp[k]=270+20*(m-1)
x2comp[k]=280+20*(m-1)
y1comp[k]=170+k*20
y2comp[k]=180+k*20
line(x1comp[k],y1comp[k])-(x2comp[k],y2comp[k]),19,bf
next k
return

hod:
print"kto budet hodit pervim?"
do
print"1-chelovek,0-computer"
input z
loop until (z=1) or (z=0)
gosub game1
return

game1:
cls
for i=1 to n
u[i]=m-2
next i
gosub pole
if z =1 then
gosub hodchelovek
else
gosub hodkomp1
end if
return

assis2007
29.11.2008, 20:23
Всё к сожалению не уместилось. Продолжение:


hodchelovek:
gosub dvigfish
s=0
for i=1 to n
s=s+u[i]
next i
if s=0 then
print "viigral chelovek"
else
gosub hodkomp2
end if
return

dvigfish:
lf$=chr$(0)+chr$(75)
rt$=chr$(0)+chr$(77)
up$=chr$(0)+chr$(72)
down$=chr$(0)+chr$(80)
ent$=chr$(13)
x1kur=x1ch[1]
x2kur=x2ch[1]
y1kur=y1ch[1]
y2kur=y2ch[1]
gosub kursor
pr=false
i=1
j=1
t=0
v=0
do
prkey$=inkey$
'key$=inkey$
if prkey$=rt$ then
if u[j]=0 then
beep(2)
else
x1ch[j]=x1ch[j]+20
x1kur=x1kur+20
x2ch[j]=x2ch[j]+20
x2kur=x2kur+20
pr=true
u[j]=u[j]-1
t=t+1
if t=p then
beep
end if
gosub pole1
gosub kursor
end if
elseif prkey$=lf$ then
if (x1kur=270) then
beep
elseif (x1kur>270) then
x1kur=x1kur-20
x1ch[j]=x1ch[j]-20
x2kur=x2kur-20
x2ch[j]=x2ch[j]-20
u[j]=u[j]+1
pr=true
v=v+1
if v=p then
beep
end if
gosub pole1
gosub kursor
end if
elseif prkey$=down$ then
if i<n then
j=i+1
y1kur=y1ch[j]
y2kur=y2ch[j]
x1kur=x1ch[j]
x2kur=x2ch[j]
gosub pole1
gosub kursor
i=j
elseif i>=n then
j=1
y1kur=y1ch[j]
y2kur=y2ch[j]
x1kur=x1ch[j]
x2kur=x2ch[j]
gosub pole1
gosub kursor
i=j
end if
elseif prkey$=up$ then
if i<=1 then
j=n
y1kur=y1ch[j]
y2kur=y2ch[j]
x1kur=x1ch[j]
x2kur=x2ch[j]
gosub pole1
gosub kursor
i=j
elseif i>1 then
j=i-1
y1kur=y1ch[j]
y2kur=y2ch[j]
x1kur=x1ch[j]
x2kur=x2ch[j]
gosub pole1
gosub kursor
end if
end if
loop until (prkey$=ent$)and(pr=true)
gosub proverka
return

proverka:
locate 1,1
for i=1 to n
locate i,i
print" u=",u[i]
next i
print"p=",p
delay (5)

return

kursor:
line((x1kur+3),(y1kur+3))-((x2kur-3),(y2kur-3)),14,bf
return
hodkomp1:
g=(m-2)mod(p+1)
if ((z=0) and (g<>0)) then
if (u[1]<=p) then
x1comp[1]=x1comp[1]-20*u[1]
x2comp[1]=x2comp[1]-20*u[1]
u[1]=0
else
r=u[1] mod (p+1)
x1comp[1]=x1comp[1]-20*r
x2comp[1]=x2comp[1]-20*r
u[1]=u[1]-r
end if
elseif ((z=0) and (g=0)) then
r=r*rnd(p)
x1comp[1]=x1comp[1]-20*r
x2comp[1]=x2comp[1]-20*r
u[1]=u[1]-r
end if
gosub pole1
s=0
for i=1 to n
s=s+u[i]
next i
if (s=0) then
print "Viigral komputer"
else
gosub hodchelovek
end if
return

pole1:
cls
for j=1 to n step 1
y1[j]=170+20*j
y2[j]=180+20*j
for i=1 to m step 1
x1[i]=250+20*i
x2[i]=260+20*i
line(x1[i],y1[j])-(x2[i],y2[j]),6,bf
next i
next j
gosub riscomp
gosub rischel
return

riscomp:
for i=1 to n
line(x1comp[i],y1comp[i])-(x2comp[i],y2comp[i]),19,bf
next i
return

rischel:
for i=1 to n
line(x1ch[i],y1ch[i])-(x2ch[i],y2ch[i]),2,bf
next i
return

hodkomp2:
b=false

do
i=0
do
pr=false
i=i+1
if (u[i]<=p)and(u[i]>1) then
x1comp[i]=x1comp[i]-20*u[i]
x2comp[i]=x2comp[i]-20*u[i]
pr=true
b=true
u[i]=0
end if
loop until (i=n)or(pr=true)
qqq=false
do
j=1
if u[j]>0 then
W[j]=u[j]mod(p+1)
if W[j]=0 then
j=j+1
elseif (w[j]<>0) then
b=true
qqq=true
x1comp[j]=x1comp[j]-20*w[j]
x2comp[j]=x2comp[j]-20*w[j]
u[j]=u[j]-w[j]
end if
end if
loop until (j=n)or(qqq=true)
s1=0
for i=1 to n
s1=s1+w[i]
next i
if s1=0 then
i=1
if u[i]>0 then
r=rnd(p)
x1comp[i]=x1comp[i]-20*r
x2comp[i]=x2comp[i]-20*r
b=true
u[i]=u[i]-r
elseif u[i]=0 then
i=i+1
end if
end if
sum=0
for i=1 to n
sum=sum+u[i]
next i
if sum=0 then
for i=1 to n
if (x1comp[i]=270+20*m) then
i=i+1
elseif (x1comp[i]<270+20*m) then
x1comp[i]=x1comp[i]+20
x2comp[i]=x2comp[i]+20
b=true
u[i]=u[i]+1
end if
next i
end if
loop until (b=true)
gosub pole1
s2=0
for i=1 to n
s2=s2+u[i]
next i
if s2=0 then
print "viigral komputer"
else
gosub hodchelovek
end if
return

Хыиуду
30.11.2008, 17:23
А в чем цель игры?

Naeel Maqsudov
30.11.2008, 20:21
Идея и алгоритм игры обсуждались здесь (http://forum.developing.ru/showthread.php?t=15470) в "Алгоритмах".
А это уже воплощение...
Однако, почему для реализации был выбран TBasic?
Проверить не на чем, а умозрительно искать ошибку просто нет времени...

assis2007
01.12.2008, 17:01
Потому что язык выбираю не я а скачать турбо бейсик оч легко да и весит он мало

assis2007
04.12.2008, 20:31
неужели никто не может помочь?

Naeel Maqsudov
05.12.2008, 01:53
Дайте ссылку на TBasic, откуда Вы его сами брали.
На сайте Борланда его, как Вы понимаете уже 100 лет как нету.
А на более тщательные поиски у меня лично нет времени.

assis2007
06.12.2008, 15:14
http://webfile.ru/2450693 вот турбо бейсик

assis2007
06.12.2008, 18:56
мне нужно разобраться только в работе с клавишами


dvigfish:
pr%=0
i=1
v=0
t=0
x1kur=x1ch[i]
x2kur=x2ch[i]
y1kur=y1ch[i]
y2kur=y2ch[i]
gosub kursor
do
select case inkey$
case chr$(13)
if (rr%=1) then
pr%=1
end if
case chr$(0)+chr$(72)
if i>1 then
i=i-1
y1kur=y1ch[i]
y2kur=y2ch[i]
x1kur=x1ch[i]
x2kur=x2ch[i]
gosub pole1
gosub kursor
end if
if i=1 then
i=n
y1kur=y1ch[i]
y2kur=y2ch[i]
x1kur=x1ch[i]
x2kur=x2ch[i]
gosub pole1
gosub kursor
end if
case chr$(0)+chr$(80)
if i<n then
i=i+1
y1kur=y1ch[i]
y2kur=y2ch[i]
x1kur=x1ch[i]
x2kur=x2ch[i]
gosub pole1
gosub kursor
end if
if i=n then
i=1
y1kur=y1ch[i]
y2kur=y2ch[i]
x1kur=x1ch[i]
x2kur=x2ch[i]
gosub pole1
gosub kursor
end if
case chr$(0)+chr$(75)
if (x1kur=270) then
beep
endaa if
if (x1kur>270) then
x1kur=x1kur-20
x2kur=x1kur-20
x1ch[i]=x1kur
x2ch[i]=x1kur
pp=u[i]
u[i]=u[i]+1
v=v+1
if v=p then
beep(2)
end if
if (pp<u[i]) then
rr%=1
end if
gosub pole1
gosub kursor
end if
case chr$(0)+chr$(77)
if u[i]=0 then
beep(4)
end if
if (u[i]>0) then
x1kur=x1kur+20
x2kur=x2kur+20
x1ch[i]=x1kur
x2ch[i]=x2kur
pp=u[i]
u[i]=u[i]-1
t=t+1
if t=p then
beep(2)
end if
if (u[i]<pp) then
rr%=1
end if
gosub pole1
gosub kursor
end if
end select
loop until pr%=1
return