home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C64'er
/
C64'er.iso
/
85xx
/
8505.d64
/
3d-movie-maker
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
7KB
|
358 lines
100 REM -----------------------------
105 REM -- 3D-MOVIE-MAKER --
110 REM -- EIN PROGRAMM VON: --
115 REM -- DIRK & ARMIN BIERNACZYK --
120 REM -- AN DER PAPENBURG 41 --
125 REM -- 4630 BOCHUM 6 --
130 REM -- TEL.: ////// --
135 REM -----------------------------
140 REM (C) 1985 BY ARMIN & DIRK
145 REM BIERNACZYK
150 :
160 REM ------------------
170 REM --- HAUPTMENUE ---
180 REM ------------------
190 :
191 IFA=0THENA=1:LOAD"TRICK.OBJ",8,1
192 :
195 POKE56,50:CLR:REM SPEICHER HERAB.
200 PRINTCHR$(147)
210 PRINTSPC(10)"** 3D-MOVIE-MAKER **"
220 PRINT:PRINT:PRINT:PRINT
230 PRINTSPC(9)"1 - GRAFIK ERSTELLEN"
235 PRINT
240 PRINTSPC(9)"2 - GRAFIK ABSPIELEN"
245 PRINT
250 PRINTSPC(9)"3 - GRAFIK LADEN"
255 PRINT
260 PRINTSPC(9)"4 - GRAFIK ABSPEICHERN"
262 PRINT
264 PRINTSPC(9)"5 - ENDE"
265 :
270 GETW$:IFW$<"1"ORW$>"5"THEN270
280 W=VAL(W$)
285 IFW=5THENEND
290 ONWGOSUB1040,5040,6040,7040
300 GOTO200
310 :
315 :
320 :
1000 REM -----------------
1010 REM --- ERSTELLEN ---
1020 REM -----------------
1030 :
1040 GOSUB4540 :REM VARIABLEN
1050 GOSUB4040 :REM EINLESEN
1060 PRINTCHR$(147)"FERTIGE BILDER: "
1061 IFAN*(A2*6+2)<23000THEN1080
1062 PRINT"ZU WENIG SPEICHERPLATZ"
1063 POKE198,0:WAIT198,1:RETURN
1070 :
1080 FORQ=1TOAN :REM ANZAHL DER BILDER
1085 GOSUB3040 :REM BEWEGEN
1090 GOSUB2040 :REM BERECHNEN
1095 GETTA$:IFTA$=" "THENIFQ>1THENSYS49152,Q-1,A2,1
1100 NEXT
1110 Q=Q-1
1120 RETURN
1130 :
1135 :
2000 REM -----------------
2010 REM --- BERECHNEN ---
2020 REM -----------------
2030 :
2040 REM --- VERSCHIEBEN1 ---
2050 :
2060 FORI=1TOA1
2070 X1(I)=X(I)+X1:Y1(I)=Y(I)+Y1
2080 Z1(I)=Z(I)+Z1
2090 NEXT
2100 :
2110 REM --- DREHEN ---
2120 :
2130 IFW1=0THEN2250
2140 FORI=1TOA1
2150 XD=X1(I):YD=Y1(I)
2160 IFXD=0THENXD=1E-20
2165 IFYD=0THENYD=1E-20
2170 R=SQR(XD*XD+YD*YD)
2180 W=ATN(YD/XD)
2190 IFXD>0ANDYD<0THENW=W+(null)*2:GOTO2210
2200 IFXD<0THENW=W+(null)
2210 W=W+W1
2220 Y1(I)=SIN(W)*R:X1(I)=COS(W)*R
2230 NEXT
2240 :
2250 IFW2=0THEN2370
2260 FORI=1TOA1
2270 ZD=Z1(I):YD=Y1(I)
2280 IFZD=0THENZD=1E-20
2285 IFYD=0THENYD=1E-20
2290 R=SQR(ZD*ZD+YD*YD)
2300 W=ATN(YD/ZD)
2310 IFZD>0ANDYD<0THENW=W+(null)*2:GOTO2330
2320 IFZD<0THENW=W+(null)
2330 W=W+W2
2340 Y1(I)=SIN(W)*R:Z1(I)=COS(W)*R
2350 NEXT
2360 :
2370 IFW3=0THEN2510
2380 FORI=1TOA1
2390 ZD=Z1(I):XD=X1(I)
2400 IFZD=0THENZD=1E-20
2405 IFXD=0THENXD=1E-20
2410 R=SQR(ZD*ZD+XD*XD)
2420 W=ATN(XD/ZD)
2430 IFZD>0ANDXD<0THENW=W+(null)*2:GOTO2450
2440 IFZD<0THENW=W+(null)
2450 W=W+W3
2460 X1(I)=SIN(W)*R:Z1(I)=COS(W)*R
2470 NEXT
2480 :
2490 REM --- UMRECHNEN ---
2500 :
2510 FORI=1TOA1
2530 X1(I)=(X1(I)+X2)*1.01^(Z1(I)+Z2)
2540 Y1(I)=(Y1(I)+Y2)*1.01^(Z1(I)+Z2)
2560 NEXT
2565 REM 1.01 KANN LEICHT GEAENDERT
2567 REM WERDEN
2580 :
2590 PA=0:PB=199
2600 PO=PO-2
2601 REM -----------------------------
2602 REM --- UBERGETRETENE LINIEN ---
2603 REM --- BERECHNEN UND POKEN ---
2604 REM -----------------------------
2610 FORI=1TOA2
2620 X0%=X1(P1(I)):Y1%=Y1(P1(I))
2630 X2%=X1(P2(I)):Y2%=Y1(P2(I))
2640 X1%=0:X3%=0:ME=0
2641 IFX0%> 159ANDX2%> 159THEN2760
2642 IFX0%<-159ANDX2%<-159THEN2760
2643 IFY1%<- 99ANDY2%<- 99THEN2760
2644 IFY1%> 99ANDY2%> 99THEN2760
2650 IFY1%=Y2%THEN2711
2655 IFX2%=X0%THEN2690
2660 M=(Y2%-Y1%)/(X2%-X0%)
2670 B=-M*X0%+Y1%
2680 GOTO2720
2690 IFY1%>99ORY1%<-99THENY1%=99*SGN(Y1%)
2700 IFY2%>99ORY2%<-99THENY2%=99*SGN(Y2%)
2710 GOTO 2760
2711 IFX0%>159ORX0%<-159THENX0%=159*SGN(X0%)
2712 IFX2%>159ORX2%<-159THENX2%=159*SGN(X2%)
2713 GOTO 2760
2720 IFX0%>159ORX0%<-159THENX0%=159*SGN(X0%):Y1%=M*X0%+B
2730 IFX2%>159ORX2%<-159THENX2%=159*SGN(X2%):Y2%=M*X2%+B
2740 IFY1%>99ORY1%<-99THENY1%=99*SGN(Y1%):X0%=(Y1%-B)/M
2750 IFY2%>99ORY2%<-99THENY2%=99*SGN(Y2%):X2%=(Y2%-B)/M
2760 IFY1%>99ORY1%<-99THENX1%=255:X0%=0:Y1%=0:Y2%=0:X2%=0:GOTO2810
2770 IFX0%>159ORX0%<-159THENX1%=255:X0%=0:Y1%=0:Y2%=0:X2%=0:GOTO2810
2780 :
2790 X0%=X0%+160:X2%=X2%+160
2791 Y1%=Y1%+100:Y2%=Y2%+100
2793 IFY1%>PATHENPA=Y1%
2794 IFY2%>PATHENPA=Y2%
2795 IFY1%<PBTHENPB=Y1%
2796 IFY2%<PBTHENPB=Y2%
2799 IFX0%>255THENX0%=X0%-256:X1%=1
2800 IFX2%>255THENX2%=X2%-256:X3%=1
2805 :
2810 POKEPO,X0%:POKEPO-1,X1%
2820 POKEPO-2,Y1%:POKEPO-3,X2%
2830 POKEPO-4,X3%:POKEPO-5,Y2%
2840 PO=PO-6
2850 NEXT
2860 :
2862 IFPA<PBTHENPA=199:PB=0
2863 PA=40*((PAOR7)+1)/256+1
2864 PB=40*(PBAND248)/256
2866 POKE PO+6*A2+2,INT(P1)-INT(P3)
2868 POKE PO+6*A2+1,P3
2870 P1=P2:P2=PA:P3=P4:P4=PB
2872 PRINTCHR$(19)SPC(16)Q
2880 RETURN
2890 :
2900 :
3000 REM ---------------
3010 REM --- BEWEGEN ---
3020 REM ---------------
3030 :
3040 IFE=0THEN3100
3050 W1=W1+WZ:W2=W2+WX:W3=W3+WY
3060 X1=X1+XA:Y1=Y1+YA:Z1=Z1+ZA
3070 X2=X2+XB:Y2=Y2+YB:Z2=Z2+ZB
3080 E=E-1:RETURN
3090 :
3100 READ XA,YA,ZA,WX,WY,WZ,XB,YB,ZB,E
3110 WX=WX*(null)/180:WY=WY*(null)/180
3120 WZ=WZ*(null)/180:YA=-YA:YB=-YB
3130 GOTO3050
3140 :
3150 :
4000 REM ----------------
4010 REM --- EINLESEN ---
4020 REM ----------------
4030 :
4040 I=0
4050 I=I+1
4060 READ X(I),Y(I),Z(I)
4070 Y(I)=-Y(I)
4080 IFX(I)<1000THEN4050
4090 A1=I-1
4100 I=0
4110 I=I+1
4120 READ P1(I),P2(I)
4130 IFP1(I)<1000THEN4110
4140 A2=I-1
4150 :
4155 AN=0
4157 READA:IFA=1000THEN4180
4160 FORI=1TO9:READA:NEXT
4170 AN=AN+A:GOTO4157
4180 RESTORE
4190 READA,A,A
4200 IFA<1000THEN4190
4210 READA,A
4220 IFA<1000THEN4210
4230 :
4240 PRINTCHR$(147)"BILDERZAHL "AN
4250 PRINTCHR$(19)SPC(11);:INPUT I
4260 IFI>255ORI>ANTHEN4240
4270 AN=I
4280 RETURN
4290 :
4300 :
4500 REM -----------------
4510 REM --- VARIABLEN ---
4520 REM -----------------
4530 :
4533 REM NACH BEDARF DIMENSIONIEREN
4536 :
4540 DIM X(50),Y(50),Z(50)
4560 DIM X1(50),Y1(50),Z1(50)
4570 DIM P1(50),P2(50)
4580 PO=35839:P1=32:P2=32:P3=0:P4=0
4590 RETURN
4600 :
4605 :
5000 REM -----------------
5010 REM --- ABSPIELEN ---
5020 REM -----------------
5030 :
5040 IFQ>0ANDA2>0THEN5090
5050 PRINTCHR$(147):PRINT:PRINT:PRINT
5060 PRINTSPC(5)"ES GIBT KEINE GRAFIK"
5070 POKE198,0:WAIT198,1:POKE198,0
5080 RETURN
5090 INPUT"[147]WIEVILE DURCHLAUEFE";DU
5091 IFDU>255ORDU<1THEN5090
5092 PRINT"WIEVIELE BILDER "Q
5093 PRINT"[145]"SPC(19);:INPUTI
5094 IFI>QORI<1THEN5092
5100 :
5105 SYS49152,I,A2,DU:RETURN
5110 :
6000 REM -------------
6010 REM --- LADEN ---
6020 REM -------------
6030 :
6040 PRINTCHR$(147):PRINT:PRINT:PRINT:PRINT
6050 INPUT" FILENAME: ";NA$
6055 IFNA$="M"THENRETURN
6060 OPEN2,8,2,NA$+".GRA,S,R"
6070 OPEN1,8,15:INPUT#1,FE$
6080 IFFE$="00"THEN6090
6082 CLOSE1:CLOSE2:GOTO6040
6090 GET#2,Q$,A2$
6100 Q=ASC(Q$):A2=ASC(A2$)
6110 AD=35839-Q*(A2*6+2)
6140 CLOSE2:CLOSE1
6150 AH=INT(AD/256):AL=AD-AH*256
6160 A$=NA$+".GRA,S"
6170 FORI=51000TO51000+LEN(A$)-1
6180 POKEI,ASC(MID$(A$,I-50999,1))
6190 NEXT
6200 POKE183,LEN(A$)
6210 POKE187,56:POKE188,199
6220 POKE185,0:POKE186,8:POKE147,0
6570 POKE195,AL:POKE196,AH
6580 SYS62648
6590 RETURN
6600 :
6610 :
6620 :
7000 REM -------------------
7010 REM --- ABSPEICHERN ---
7020 REM -------------------
7030 :
7040 IFQ>0ANDA2>0THEN7090
7050 PRINTCHR$(147):PRINT:PRINT:PRINT
7060 PRINTSPC(5)"ES GIBT KEINE GRAFIK"
7070 POKE198,0:WAIT198,1:POKE198,0
7080 RETURN
7090 PRINTCHR$(147):PRINT:PRINT:PRINT
7100 INPUT" FILENAME: ";NA$
7105 IFNA$="M"THENRETURN
7110 OPEN2,8,2,NA$+".GRA,S,W"
7120 OPEN1,8,15:INPUT#1,FE$
7130 IFFE$="00"THEN7140
7135 CLOSE1:CLOSE2:GOTO7090
7140 PRINT#2,CHR$(Q);CHR$(A2);
7150 FORI=35839-Q*(A2*6+2)TO35839
7160 PRINT#2,CHR$(PEEK(I));:NEXT
7170 CLOSE2:CLOSE1:RETURN
7175 :
7180 :
7185 :
8000 REM -------------------------
8010 REM --- DATAS FUER PUNKTE ---
8020 REM -------------------------
8030 :
8040 DATA -20, 10,0
8050 DATA -30, 10,0
8060 DATA -30,-10,0
8070 DATA -20,-10,0
8080 DATA -20, 0,0
8090 DATA -30, 0,0
8100 DATA -15, 10,0
8110 DATA -15, 0,0
8120 DATA - 5, 10,0
8130 DATA - 5, 0,0
8140 DATA - 5,-10,0
8150 DATA 10, 10,0
8160 DATA 5, 5,0
8170 DATA 15,-10,0
8180 DATA 5,-10,0
8190 DATA 5, 0,0
8200 DATA 15, 0,0
8210 DATA 15, -5,0
8220 DATA 5, -5,0
8230 DATA 20,-10,0
8240 DATA 20, 0,0
8250 DATA 20, -5,0
8260 DATA 30, 0,0
8900 DATA 1000,1000,1000
8910 :
9000 REM ----------------------------
9010 REM --- VERBINDUNGSVOSCHRIFT ---
9020 REM ----------------------------
9030 :
9040 DATA 1, 2, 2, 3, 3, 4, 4, 5
9050 DATA 5, 6, 7, 8, 8,10, 9,11
9060 DATA 12,13, 14,15, 15,16