Je už urobená hra Battleship SBC6502 pre SBC6502 a urobil som konverziu tejto hry aj pre SBC6809 - Battleship SBC6809 - tak som si povedal treba urobiť konverziu hry aj pre Micro UK101. Tu som sa už pokúsil dodržať zobrazenie ako pri SBC6809, generovanie RND je pritom rovnaké ako u SBC6502, ASCII znaky na začiatku nevie správne zobraziť taktiež, o zábavu bolo postarané - ale táto konverzia bola najľahšia. Čakacie slučky v programe sú urobené pre x-tal 4.000MHz, bez zmeny budú vyhovovať aj pre použitie x-talu 4.9152MHz. rincíp zostáva rovnaký ako u SBC6502 - najprv prebieha zápis do tieňovej obrazovkovej RAM odkiaľ sa naraz vždy prepisuje celá obrazoka vždy po vykonaní nejakej akcie.
Úvodná obrazovka.
Tiež sa tu počíta s tým že na Micro UK101 že je dostupná RAM o veľkosti 32kB, je to dané pevnými adresami v programe pre použité dvojrozmerné pole. U týchto malých SBC je 32kB RAM nepísaným štandartom takže tu nemáme problém s veľkosťou dostupnej RAM.
Vzhľad hracieho poľa je identický ako u SBC6809.
S_battle_4_000MHz_UK101.txt (5,23 kb)
Takže teraz sú urobené 3 verzie tej istej hry - a to pre SBC6502, SBC6809 a Micro UK101, Basic je na všetkých troch spomenutých SBC ale mierne odlišný a tak boli potrebné drobné úpravy vždy pre konkrétny typ. Čo mierne prekvapuje je to, že SBC6502 a Micro UK101 používajú rovnakú verziu Basic-u a pritom nie sú na 100% kompatibilné, ale napriek tomu hra teraz funguje bez problémov na všetkých spomenutých troch typoch SBC.
Micro UK101
____________________________________________________________
Listing programe pre Micro UK101:
1000 CLEAR:POKE 15,80:? CHR$(12):?:A=31000:B=124:REM 05.11.2023
1160 ?:?:? TAB(24)"- Micro UK101 - 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(46)"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(1)*14):D=D+1:POKE Q,D
2720 E=INT(RND(1)*40):E=E+1:POKE Q+1,E
2725 Q=Q+2:? I;:FOR R=0 TO 650: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 6000:NEXT:RETURN
9999 FOR F=0 TO 20000: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 hodnoty v obsahu 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: