Keď som napísal hru Battleship pre SBC6502 tak som si povedal - musí to priamo fungovať aj pre SBC6809. Chyba lávky, ako obyčajne ak si myslím že niečo bude hodne jednoduché tak som sa zase mýlil. Ako sa ukázalo - nedala sa hra napísaná pre SBC6502 priamo spustiť aj na SBC6809, niektoré ASCII znaky to z nejakých príčin čiastočne ignoruje a tak som musel urobiť čiastočnú prerábku /konverziu/ tejto hry - vďaka tomu tu "odpadla" úvodná ASCII obrazovka lode. Pri ďalšom som zistil že tiež generovanie RND vyžadovalo v sebe urobiť zmenu. Ďalšia vec - SBC6809 nepozná príkaz SPC(číslo), čiže som ho všade musel nahradiť príkazom TAB(číslo). Riadky v programe som chcel "zahustiť", boli by podstatne dlhšie ako pri SBC6502, pretože toto SBC6809 pri písaní programu dovoľuje, teda obsahy riadkov by boli extrémne dlhé, parádne to môže skrátiť zápis, na druhú stranu je to potom na úkor prehľadnosti, rozhodne sa to zle číta v terminálovom okne, takže som zostal pri pôvodnej dĺžke riadkov. Na druhú stranu - je tu len jedna verzia programu, pretože procesor 6809 beží na 1.8432MHz a teda tu nejaké zmeny clocku príliš nehrozia. Program ráta s SBC6809 a dostupnou 32kB RAM, je to dané umiestnením dvojrozmerného poľa v RAM.
No a čo dodať na záver? - teraz tomu síce chýba efektná úvodná obrazovka ale program funguje.
Jednoduchá úvodná obrazovka.
Aj hracie pole vďaka neschopnosti "tlačiť" niektoré znaky na obrazovku je pozmenené
a tedy prišlo k úprave vzhľadu hracej plochy.
Síce viem tam tie znaky dostať aj inakším spôsobom, ale bolo by to zbytočne zložité a tak som sa rozhodol hru nekomplikovať a vyriešil som to tak ako to je teraz. V hracom poli je to iné, tam sa zapisuje pomocou POKE priamo do RAM, tam to ide jednoduchšie a teda tam je problém na 100% vyriešený. Vyznať sa v tom dá - a hrať sa to dá tak isto. Môžem skonštatovať že teraz aj SBC6809 má funkčnú konverziu uvedenej hry.
S_battle_1_8432MHz_SBC6809.txt (5,23 kb)
SBC6809
______________________________________________________
12.11.2023
Pre tých ktorí majú radi dlhé riadky ktoré umožňuje zápis v SBC6809 ... je tu hra uložená aj v tomto formáte, aspoň som to skúsil, funguje tak isto:
S_battle_1_8432MHz_SBC6809_long_rows.txt (4,95 kb)
(Pritom sa tu ani zďaleka nevyužíva plná dĺžka programového riadku - je to až 250 znakov.)
____________________________________________________________
Listing programu pre SBC6809:
1000 CLEAR:POKE 15,80:? CHR$(12):?:A=31000:B=124:REM 05.11.2023
1160 ?:?:? TAB(26)"- SBC6809 - Battleships game -"
1170 ? TAB(22);"by Igi(c)2023 - http://blog.3b2.sk/igi";
1172 GOSUB 9999
1200 ? CHR$(12):GOSUB 2500:GOSUB 2700
1400 ?:? CHR$(12);
1410 ? TAB(5)"+- 20 battleships in this game,you have to destroy";
1415 ? " at least 14 ships -+"
1417 ? TAB(4)"+-------------+--";
1420 ? "+....X....1111111111222222222233333333334";
1422 ? "+-----------+"
1425 ? TAB(18)"+Y +1234567890123456789012345678901234567890+"
1430 GOSUB 5100
1700 A=31000:GOSUB 2900:A=31050:GOSUB 2900:A=31100:GOSUB 2900
1706 A=31150:GOSUB 2900:A=31200:GOSUB 2900:A=31250:GOSUB 2900
1714 A=31300:GOSUB 2900:A=31350:GOSUB 2900:A=31400:GOSUB 2900
1720 A=31450:GOSUB 2900:A=31500:GOSUB 2900:A=31550:GOSUB 2900
1726 A=31600:GOSUB 2900:A=31650:GOSUB 2900
1800 GOSUB 5100
1805 ? TAB(18)"+Score:";:IF SC<10 THEN ?" "SC;
1820 IF SC=>10 THEN ? SC;
1825 ? TAB(17)"Gun shots: "GS;
1830 IF GS<10 THEN ? " +"
1835 IF GS=>10 AND GS <100 THEN ? " +"
1840 IF GS=>100 THEN ? "+"
1845 ? TAB(18)"+------------- X or Y=0 -> End -------------+"
1850 IF SC=14 THEN 2940
1880 ? TAB(28)"Your choice X (1-40)";:INPUT X
1885 IF X=0 THEN 2950
1890 IF X>40 THEN GOSUB 9988:GOTO 1400
1900 ? TAB(28)"Your choice Y (1-14)";:INPUT Y
1905 IF Y=0 THEN 2950
1910 IF Y>14 THEN GOSUB 9988:GOTO 1400
2000 T=31700:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2002 T=31702:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2004 T=31704:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2006 T=31706:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2008 T=31708:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2010 T=31710:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2012 T=31712:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2014 T=31714:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2016 T=31716:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2018 T=31718:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2020 T=31720:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2022 T=31722:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2024 T=31724:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2026 T=31726:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2028 T=31728:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2030 T=31730:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2032 T=31732:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2034 T=31734:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2036 T=31736:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2038 T=31738:GOSUB 2800:IF X=X1 AND Y=Y1 THEN 3000
2050 GS=GS+1
2055 IF X<>X1 OR Y<>Y1 THEN 4000
2250 C=C+1:?C;:FOR F=A+4 TO A+43:POKE F,46:NEXT F:RETURN
2500 GS=0:SC=0:C=0:?"I am generating a line no.:"
2552 A=31000:GOSUB 2250
2555 POKE A,B:POKE A+1,32:POKE A+2,49:POKE A+3,B:POKE A+44,B
2560 A=31050:GOSUB 2250
2562 POKE A,B:POKE A+1,32:POKE A+2,50:POKE A+3,B:POKE A+44,B
2570 A=31100:GOSUB 2250
2572 POKE A,B:POKE A+1,32:POKE A+2,51:POKE A+3,B:POKE A+44,B
2580 A=31150:GOSUB 2250
2582 POKE A,B:POKE A+1,32:POKE A+2,52:POKE A+3,B:POKE A+44,B
2590 A=31200:GOSUB 2250
2592 POKE A,B:POKE A+1,32:POKE A+2,53:POKE A+3,B:POKE A+44,B
2600 A=31250:GOSUB 2250
2602 POKE A,B:POKE A+1,32:POKE A+2,54:POKE A+3,B:POKE A+44,B
2610 A=31300:GOSUB 2250
2612 POKE A,B:POKE A+1,32:POKE A+2,55:POKE A+3,B:POKE A+44,B
2620 A=31350:GOSUB 2250
2622 POKE A,B:POKE A+1,32:POKE A+2,56:POKE A+3,B:POKE A+44,B
2630 A=31400:GOSUB 2250
2632 POKE A,B:POKE A+1,32:POKE A+2,57:POKE A+3,B:POKE A+44,B
2640 A=31450:GOSUB 2250
2642 POKE A,B:POKE A+1,49:POKE A+2,48:POKE A+3,B:POKE A+44,B
2650 A=31500:GOSUB 2250
2652 POKE A,B:POKE A+1,49:POKE A+2,49:POKE A+3,B:POKE A+44,B
2660 A=31550:GOSUB 2250
2662 POKE A,B:POKE A+1,49:POKE A+2,50:POKE A+3,B:POKE A+44,B
2670 A=31600:GOSUB 2250
2672 POKE A,B:POKE A+1,49:POKE A+2,51:POKE A+3,B:POKE A+44,B
2680 A=31650:GOSUB 2250
2682 POKE A,B:POKE A+1,49:POKE A+2,52:POKE A+3,B:POKE A+44,B
2684 ?:RETURN
2700 Q=31700:?:?"I am generating 20 battleships ..."
2705 FOR I=1 TO 20
2710 D=INT(RND(0)*14):D=D+1:POKE Q,D
2720 E=INT(RND(0)*40):E=E+1:POKE Q+1,E
2725 Q=Q+2:? I;:FOR R=0 TO 300:NEXT:NEXT:RETURN
2800 Y1=PEEK(T):X1=PEEK(T+1):RETURN
2900 ? TAB(18);:FOR F=A TO A+44:? CHR$(PEEK(F));:NEXT F:?
2905 RETURN
2940 ?TAB(16)"Congratulations! You destroyed the enemy's fleet."
2945 GOTO 2955
2950 ? CHR$(12)
2955 ?:?TAB(28)"(N)ew game or (Q)uit:";:INPUT A$
2960 IF A$="N" THEN 1200
2965 IF A$="Q" THEN END
2970 GOTO 2950
3000 ?TAB(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000
3080 GS=GS+1:GOTO 1400
4000 ?TAB(36)"Miss !!!";:GOSUB 9998:OP=120:GOSUB 5000:GOTO 1400
5000 IF Y=1 THEN POKE (31004+X-1),OP
5010 IF Y=2 THEN POKE (31054+X-1),OP
5015 IF Y=3 THEN POKE (31104+X-1),OP
5025 IF Y=4 THEN POKE (31154+X-1),OP
5030 IF Y=5 THEN POKE (31204+X-1),OP
5035 IF Y=6 THEN POKE (31254+X-1),OP
5040 IF Y=7 THEN POKE (31304+X-1),OP
5045 IF Y=8 THEN POKE (31354+X-1),OP
5050 IF Y=9 THEN POKE (31404+X-1),OP
5055 IF Y=10 THEN POKE (31454+X-1),OP
5060 IF Y=11 THEN POKE (31504+X-1),OP
5065 IF Y=12 THEN POKE (31554+X-1),OP
5070 IF Y=13 THEN POKE (31604+X-1),OP
5075 IF Y=14 THEN POKE (31654+X-1),OP
5080 RETURN
5100 ? TAB(18)"+-------------------------------------------+"
5102 RETURN
9988 ?TAB(37)"Error ...";:GOSUB 9998:RETURN
9998 FOR F=0 TO 2255:NEXT:RETURN
9999 FOR F=0 TO 7518:NEXT:RETURN
_____________________________________________________________
Upozornenie:
Zobrazenie krížiku platí pre nastavenie fontu v Hypertermináli, kedy je jeho okno zmenšené - písmo Lucida Console, veľkosť písma 8, osobne používam najradšej túto veľkosť Hyperterminálového okna:
Ak ponecháme základné nastavenie fontu čo je písmo Terminal, veľkosť písma 14:
tak musíme v programovom riadku číslo 3000 urobiť zmenu, pôvodný text:
3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=134:GOSUB 5000
nahradíme:
3000 ?SPC(35)"Bingo !!!";:GOSUB 9998:SC=SC+1:OP=127:GOSUB 5000
Čiže je tu zmena v obsahu použitej premennej OP - po tejto zmene sa zobrazí namiesto krížiku pri zásahu lodička , ak sa zmena neprevedie bude sa zobrazovať iný, vzhľadom nie vhodný znak. Toto samozrejme platí aj v opačnom garde. Je to dané tým, že uvedené dva fonty používajú mierne odlišnú znakovú sadu.
____________________________________________________________
Vaše hodnotenie, Rate post: