Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a programomban?

David134 kérdése:

Mi a hiba a programomban?

Figyelt kérdés

A feladatom hogy 2 darab tank lövi egymást.Az egyik a képernyő tetején a másik az alján van és tudnak lőni és mozogni.


program motor;

uses crt;

var q:char;

ido:word;

tvx,tvx2,Lx,Ly,Lx2,Ly2:byte;

lottem:boolean;

begin

//univerzális motor:

ido:=0;

tvx:=40;

lottem:=false;

//torpedóvető kezdőhelyzet

gotoxy(tvx,24);

write('v');

repeat

//eseményvezérlő:

q:='%'; //q semleges értéke

if keypressed then q:= readkey;

case q of

'a','A':begin

if tvx>1 then

begin

gotoxy (tvx,24);

write(' ');

tvx:=tvx-1;

gotoxy (tvx,24);

write('v');

end;

end;

'd','D': begin

if tvx<80 then

begin

gotoxy (tvx,24);

write(' ');

tvx:=tvx+1;

gotoxy (tvx,24);

write('v');

end;

end;

' ': begin

lottem:=true;

Ly:=23;

Lx:=tvx;

end; //space eset

end; //case

//időfüggő vezérlő

ido:=ido+1;

if ido=4000 then

begin

ido:=0;

if lottem then

begin

gotoxy (Lx,Ly);

write(' ');

Ly:=Ly-1;

gotoxy (Lx,Ly);

write('*');

writeln(' ');

end;

gotoxy(tvx2,10);

write('v');

repeat

//eseményvezérlő:

q:='%'; //q semleges értéke

if keypressed then q:= readkey;

case q of

'k','K':begin

if tvx2>1 then

begin

gotoxy (tvx2,24);

write(' ');

tvx:=tvx-1;

gotoxy (tvx2,24);

write('v');

end;

end;

'j','J': begin

if tvx2<80 then

begin

gotoxy (tvx2,24);

write(' ');

tvx2:=tvx2+1;

gotoxy (tvx2,24);

write('v');

end;

end;

(' '): begin

lottem:=true;

Ly2:=23;

Lx2:=tvx2;

end; //space eset

end; //case

//időfüggő vezérlő

ido:=ido+1;

if ido=4000 then

begin

ido:=0;

if lottem then

begin

gotoxy (Lx2,Ly2);

write(' ');

Ly2:=Ly2-1;

gotoxy (Lx2,Ly2);

write('*');

writeln(' ');

end;

until q=chr(27);

end.



2016. ápr. 25. 20:07
 1/8 anonim ***** válasza:
Szerintem az a baj, hogy nincsen strukturalva es tagolva, formazva. Igy en sem talalnam meg a hibat...
2016. ápr. 25. 20:19
Hasznos számodra ez a válasz?
 2/8 SimkoL ***** válasza:
A kód egy köpedelem és egy until biztosan hiányzik.
2016. ápr. 25. 20:33
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:

1. Indentáld (szóval a ciklusmagokat, a függvény-/eljárástörzseket és a feltételek bekövetkeztekor végrehajtandó részeket kezdd bentebb) és struktúráld a kódot, mert így nehezen áttekinthető.


2. Használj valamilyen kódmegosztó oldalt (pastebin .com, pastie.org), mert hozzászólásba illesztve a kód olvashatatlan.


3. A 2. "időfüggő vezérlő" külső feltétele nincs lezárva.


4. A belső hátultesztelő ciklus sincs lezárva.

2016. ápr. 25. 20:39
Hasznos számodra ez a válasz?
 4/8 tabaki ***** válasza:

Elképesztő ötlet volt a kérdésbe írni egy százsoros programot. Így minden egyes válasz vagy csak megnézés előtt óriás műlesiklást kell végeznie a GYK-közösség boldogtalan tagjainak.

Egy kiadós indentálási munkafolyamaton már túl vagyok, de annyi erőm már nem maradt, hogy meg is értsem a szándékot. Mindenesetre úgy tűnik, a blokkok lezárásával időnként gondjaid akadnak, de ezen túl sem világos minden. Ha már tudod, hogy hasznosak a beszélő változónevek, miért nem tartod magad következetesen ehhez a dicséretes gyakorlathoz? Mit csinál az IDO változó (nyilván idő, de hogy működik, mert valódi időmérést nem látok)? Az állandóan ismétlődő feladatokat miért nem rakod beszédes nevű eljárásokba? Gondolom, ezzel is gyorsítani akarod, de igazán hasznosnak nem tűnik, cserébe viszont így jóformán átláthatatlan az ökörh*gyozás módjára kanyargó kód. Mi haszna van a kommentjeidnek (a blokkvégek helyénvaló azonosításán kívül), ha kínosan ügyelsz arra, hogy még véletlenül se áruld el, mi a talányos nevű változók szerepe, és a gombnyomások milyen műveletet hajtanának végre. Ha a programod működne, mindez nyilván kiderülne, de egyelőre még nem állt be ez a kedvező állapot, némi módosítással is csak 'v' betűk kiírását és végtelenbe rohanó pluszjeleket sikerült kicsiholnom belőle. Ráadásul engem már megfertőzött SimkoL a korrekt kisbetűs/nagybetűs utasításnevek használatával is, ez még külön kellemetlenné teszi a programod olvasgatását. Igen, a pascal erre nem érzékeny, de ha valaha más nyelvvel is próbálkozol, sokat szívsz majd, ha most megszokod ezt a lezser stílust.

2016. ápr. 26. 01:48
Hasznos számodra ez a válasz?
 5/8 tabaki ***** válasza:

Na jó, mára több mint eleget küzdöttem. Kiszerveztem eljárásokba, ami vélekedésem szerint oda való, de az továbbra is homályos, hogy az IDO változóval mit csinálsz; Valami sejtelem azt súgja, hogy végtelen ciklust eredményez. Nem látom a SPACE hatására beállított és soha vissza nem álló LOTTEM változó feladatát sem, de azt sem, hogy miért vonatkozik minden mozgatás az alsó sorra -- nem, mintha eljutottam volna addig, hogy az A/D bármit is megmoccantott volna nekem a képernyőn, csak a GotoXY-értékek alapján gondolom. Fogalmam sincs, hogy mi vetné végét a vélhetőleg lövedéket jelentő pluszjelek kiírásának, holott erre egy a képernyő magasságának megfelelő kötött hosszúságú for-ciklus elegendőnek tűnik. Elég furcsán hat a GotoXY utasításokkal menedzselt képernyőn a WriteLn, nem értem, miért a jobbra eső K billentyű mozgat balra, a J pedig jobbra, TVX2 mozgatásakor miért TVX értéke csökken, és valahol az egész képernyőpozícionálás kisiklik valami disznóság miatt, aminek a detektálásához már fáradt vagyok.

Szerintem dolgozz még rajta...

2016. ápr. 26. 03:34
Hasznos számodra ez a válasz?
 6/8 tabaki ***** válasza:

Mit kéne, hogy csináljon a Space megnyomása?

Vesztemre néztem bele most reggel is, mert belefájdult a fejem. Estig más dolgom van, de kíváncsian várom, mi sül ki ebből az egészből.

2016. ápr. 26. 08:37
Hasznos számodra ez a válasz?
 7/8 tabaki ***** válasza:
Szerintem sokkal pontosabban írd le, hogy mit szeretnél tulajdonképpen. Úgy tűnik, a feladatleírásodnál sokkal bonyolultabb dologgal kísérletezel, például, hogy két játékos vezérelhesse a két tankot egy időben. Lehet, hogy teljesen félreértem a szándékodat, de ha mégis ilyesmiről volna szó, az nem fog menni.
2016. ápr. 26. 21:26
Hasznos számodra ez a válasz?
 8/8 A kérdező kommentje:

Annyira jó ezt visszanézni :D


Szerencsére jóó távol maradtam az informatikától. Az akkor tanárom pedig egy szemétláda volt, és semmi távpontot nem adott nekünk a feladat elkészítésére, és ezért fordultam az internet népéhez.


Utólag is köszönöm a segítséget mindenkinek.

A privátban engem ócsároló embereknek pedig külön köszönet illeti!

2020. nov. 17. 16:33

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!