Centro! – Amiga – AmigaBASIC

Rivista: Commodore Computer Club – Numero: 66 – Anno 1989 – Listato di: N/A

Tornano Francesco Sblendorio ed il Commodore Amiga di nuovo protagonisti di RetroLiPS, con un listato tratto da una delle piú apprezzate riviste italiane dedicate ai computer Commodore.

Dopo aver esplorato i disegni tridimensionali con Superfici3d, é la volta di un simpatico gioco. Centro! é un gioco di abilitá che metterá a dura prova la nostra destrezza nel gestire il mouse. Dovremo infatti unire tutti i quadrati, in ordine crescente, senza incappare nelle penalitá causate da incauti movimenti o dal toccare i numeri sbagliati.

Francesco ha digitato il listato per AmigaBasic dopodiché ne ha realizzato una versione eseguibile compilandolo con HiSoft BASIC. Da notare la differenza di velocitá tra la versione AmigaBasic e quella compilata. Sembra di giocare a due giochi differenti…

Il listato originale é stato pubblicato sulla rivista italiana Commodore Computer Club n.66 di Luglio/Agosto 1989, pagina 44.

Titolo: Centro!
Piattaforma: Commodore Amiga
Linguaggio: AmigaBASIC
Versione originale: Gregor Samsa
Pubblicazione: Commodore Computer Club n.66 di Luglio/Agosto 1989
Anno: 1989
Trascrizione: Francesco Sblendorio
Anno: 2022
Download: Centro!.zip
Note: Il gioco funziona con l’AmigaBasic di Microsoft.

Istruzioni
Partendo dalla casella numero 1, cliccando con il mouse dentro la stessa, dovete unire tutte le altre caselle in ordine crescente ed alla fine toccare la palla celeste al centro. Attenzione ai movimenti bruschi ed a sostare troppo tempo con il mouse all’interno delle caselle stesse: le penalitá aumenteranno inesorabilmente.
Fate attenzione anche all’ordine con cui toccate le caselle, toccare quelle sbagliate infatti, fa aumentare esponenzialmente il valore della penalitá.
Ah, dimenticavo, cercate di passare il meno possibile sulle righe giá disegnate, anche questo, indovinate un po’, aggiungerá penalitá…
Insomma, mano ferma e nervi saldi!
Scegliete il livello di difficoltá da 0 a 6 e… Buon Divertimento!

Quello che andiamo a presentarvi é un listato breve, puó essere digitato in pochi minuti, ma che dimostra come non siano necessarie righe e righe di codice per creare qualcosa di carino in Basic.
A volte bastano una buona idea e buona volontá per realizzare qualcosa di simpatico.
Se a tutto questo aggiungiamo la possibilitá di utilizzare editor di sviluppo moderni e software che negli anni ’90 non tutti possedevano (adesso possiamo reperire facilmente qualsiasi compilatore Basic per Amiga), possiamo dare sicuramente una marcia in piú a tutti questi programmini. Cosa che Francesco ha fatto elegantemente, compilando il listato con HiSoft BASIC.

Qui di seguito trovate il codice ottimizzato per essere copiato su un file di testo ed essere scritto su un file ADF utilizzando il programma ADF Opus.

Se invece siete ansiosi di provare il programma su un Amiga reale o su un emulatore, suggerisco WinUAE, scaricate il file Centro!.zip contenente il file Centro!.ADF (creato da Francesco Sblendorio) e lanciate il file Centro!.bas.

PS – Se incontrate difficoltá ad utilizzare ADF Opus, WinUAE o l’AmigaBASIC, scriveteci: saremo lieti di aiutarvi!

Attenzione – Ci siamo resi conto che nel listato i caratteri ‘>’ e ‘<‘ potrebbero venir sostituiti dai rispettivi encoding html ‘&gt’ e ‘&lt’. Nel caso, sostituite questi valori nel listato prima di copiarlo sull’emulatore.

Listato: Centro! – Commodore Amiga – AmigaBASIC


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
'========== INIZIALIZZAZIONI ==========
CLS:ON BREAK GOSUB chiude:BREAK ON
DIM flag(16),x1(16),y1(16),x2(16)
DIM y2(16),locx(16),locy(16)
SCREEN 2,640,250,3,2:WINDOW 2,,,16,2
start:
WINDOW 2:COLOR 1,0: CLS
sp$=CHR$(32):count=1:pu=0
x=5:y=12:a1$=SPACE$(5):a2$=SPACE$(2)
LOCATE 15,27:INPUT "DIFFICOLTA' (0-6): ",tr
IF tr<0 OR tr>6 THEN start
PALETTE 4,1,.13,.93:CLS:COLOR 1,2
'===== DISEGNA SCHERMATA PRINCIPALE ====
FOR z1=0 TO 3
  FOR z2=1 TO 4
    caso:
    RANDOMIZE TIMER:xx=INT(RND*16+1)
    IF flag(xx)=1 THEN GOTO caso
    flag(xx)=1
'---- COORDINATE QUADRATI (IN PIXEL) ---
    x1(xx)=(y-1)*8:y1(xx)=(x-1)*8
    x2(xx)=x1(xx)+39:y2(xx)=y1(xx)+23
'---------------------------------------
    locx(xx)=x:locy(xx)=y
    GOSUB quadrati
    y=y+17
  NEXT z2
y=12:x=x+6
NEXT z1
CIRCLE (310,120),30,4:PAINT (300,120),4,4
'=== RILEVAZIONE MOVIMENTO DEL MOUSE ===
'===== E TRACCIAMENTO DELLA LINEA  =====
loop1:
IF MOUSE(0)=0 THEN GOTO loop1
'----------------------------------------
' Per un alinea piu' veloce, ma meno
' precisa, inserire qui la label "muovi:"
'----------------------------------------
t=MOUSE(0):x=MOUSE(1)-8:y=MOUSE(2)-5
muovi:
LINE (x,y)-(x+tr,y+tr),1,bf
nolinea:
t=MOUSE(0):a=MOUSE(1)-8:b=MOUSE(2)-5
IF a>x THEN x=x+1:p=POINT(x+tr,y)
IF a<x THEN x=x-1:p=POINT(x,y)
IF b>y THEN y=y+1:p=POINT(x,y+tr)
IF b<y THEN y=y-1:p=POINT(x,y)
'===== CONTATTI TRA PALETTE DIVERSE ====
IF p=0 THEN GOTO muovi
IF p=1 THEN GOSUB contatto:GOTO muovi
IF p=3 THEN GOTO nolinea
'---- CONTROLLO SE QUADRATO VALIDO ----
IF p=2 THEN
  FOR xx=1 TO 16
    IF (x=>x1(xx) AND x<=x2(xx)) THEN
      IF (y=>y1(xx) AND y=<y2(xx)) THEN
        IF xx=count THEN
          COLOR 1,3:GOSUB quadrati:flag(xx)=0
          count=count+1:COLOR 1,2:GOTO nolinea
        END IF
      END IF
    END IF
  NEXT
  GOSUB contatto:GOTO nolinea
END IF
'---- CONTROLLO SE BERSAGLIO VALIDO ----
IF p=4 AND count>16 THEN
  GOTO centro
ELSE
  GOSUB contatto:GOTO nolinea
END IF
'----------------------------------------
GOTO muovi
'=============== FINE GIOCO =============
centro:
WINDOW 3,,(220,100)-(400,130),0,2
COLOR 0,4:CLS
LOCATE 2,5:PRINT "C E N T R O !!"
LOCATE 4,2:PRINT "ALTRO PERCORSO? (S/N)"
attesa:
a$=UCASE$(INKEY$)
IF a$="N" THEN GOTO chiude
IF a$="S" THEN
  WINDOW CLOSE 3:GOTO start
END IF
GOTO attesa
'============= SUBROUTINES  ============
quadrati:
IF xx<10 THEN OF$=sp$+STR$(xx)+a2$
IF xx=>10 THEN OF$=sp$+STR$(xx)+sp$
LOCATE locx(xx),locy(xx):PRINT a1$
LOCATE locx(xx)+1,locy(xx):PRINT OF$
LOCATE locx(xx)+2,locy(xx):PRINT a1$
RETURN
contatto:
LOCATE 1,1:pu=pu+1:PRINT "PENALITA' ="pu
RETURN
chiude:
WINDOW CLOSE 2
WINDOW CLOSE 3
SCREEN CLOSE 2
IF sbr=1 THEN RETURN
END

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.