Turbo basic

Ответить
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

29 ноя 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
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

29 ноя 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
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

30 ноя 2008, 17:23

А в чем цель игры?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

30 ноя 2008, 20:21

Идея и алгоритм игры обсуждались здесь в "Алгоритмах".
А это уже воплощение...
Однако, почему для реализации был выбран TBasic?
Проверить не на чем, а умозрительно искать ошибку просто нет времени...
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

01 дек 2008, 17:01

Потому что язык выбираю не я а скачать турбо бейсик оч легко да и весит он мало
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

04 дек 2008, 20:31

неужели никто не может помочь?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

05 дек 2008, 01:53

Дайте ссылку на TBasic, откуда Вы его сами брали.
На сайте Борланда его, как Вы понимаете уже 100 лет как нету.
А на более тщательные поиски у меня лично нет времени.
KoLyAn
Сообщения: 0
Зарегистрирован: 05 дек 2008, 21:58

05 дек 2008, 22:06

Решите плиз задачу. Желательно за 5-10 мин:
Составить программу трёх этапов движения шара по бильярдному столу.
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

06 дек 2008, 15:14

http://webfile.ru/2450693 вот турбо бейсик
assis2007
Сообщения: 78
Зарегистрирован: 04 ноя 2007, 19:17

06 дек 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
Ответить