HANGMAN thread continues in GAMES.

Talk about your programs in progress. Discuss how to implement features, etc.
Forum rules
This section is for testing Commander X16 programs and programs related to the CX16 for other platforms (compilers, data conversion tools, etc.)

Feel free to post works in progress, test builds, prototypes, and tech demos.

Finished works go in the Downloads category. Don't forget to add a hashtag (#) and the version number your program was meant to run on. (ie: #R41).
User avatar
ahenry3068
Posts: 1136
Joined: Tue Apr 04, 2023 9:57 pm

THE PRISONER HAS HAIR !!

Post by ahenry3068 »

Oh this is relatively minor update.... But after another hour and half
He actually has hair.. I did all this by tweaking and drawing concentric
ellipses. Its time to go to bed...

Code: Select all

10 CLS:PRINT
15 XLIMIT = 319:YLIMIT=239:PI = 3.14159265
20 PRINT "WELCOME TO HANGMAN"
30 PRINT " ONE PLAYER AGAINST THE COMPUTER ?
40 PRINT " OR HEAD TO HEAD ?"

50 SCREEN 128
60 GOSUB 5000 : REM BACKGROUND
65 GOSUB 7000 : REM GALLOWS
70 GOSUB 8000 : REM ROPE
80 GOSUB 9500 : REM THE GUYS HEAD
95 INPUT X$
100 SCREEN 0:END

2999 REM CIRCLE AND ELLIPSE SUBROUTINE
3000 Q = 1 / RA
3010 IF FILL = 1 THEN Q = .2/RA
3030 FOR I = 0 TO PI / 2 STEP Q
3040    DY = SIN(I) * RA
3050    IF YS > 0 AND YS < 1 THEN DY = DY*YS
3060    DX = COS(I) * RA
3070    IF XS > 0 AND YS < 1 THEN DX = DX*XS
3080    ZX = INT(CX - DX)
3090    ZY = INT(CY - DY)
3100    AX = INT(CX + DX)
3110    AY = INT(CY + DY)
3115    IF FILL = 1 THEN 3220
3120    IF AX<0 OR AX > XLIMIT OR AY<0 OR AY > YLIMIT THEN 3140
3130    PSET AX, AY, CC
3140    IF ZX<0 OR ZX>XLIMIT OR AY < 0 OR AY > YLIMIT THEN 3160
3150    PSET ZX, AY, CC
3160    IF AX<0 OR AX > XLIMIT OR ZY<0 OR ZY > YLIMIT THEN 3180
3170    PSET AX, ZY, CC
3180    IF ZX<0 OR ZX > XLIMIT OR ZY<0 OR ZY > YLIMIT THEN 3300
3190    PSET ZX, ZY, CC
3200    GOTO 3300
3220    LINE CX,CY,AX,AY,CC
3225    LINE CX,CY,ZX,AY,CC
3230    LINE CX,CY,AX,ZY,CC
3235    LINE CX,CY,ZX,ZY,CC 
3300 NEXT I
3310 RETURN 

5000 RECT 0,0, XLIMIT, YLIMIT, 14 : REM THE SKY
5010 CX = 5:CY=4:CC = 16:FILL = 0:XS=0:YS=0:RA = 29
5020 GOSUB 3000:RA=RA-1:GOSUB 3000
5030 CC = 7:
5040 FOR RA = 27 TO 1 STEP -1:GOSUB 3000:NEXT RA
5050 GOSUB 6500:REM DRAW A CLOUD
5110 RECT 0, 180, XLIMIT, YLIMIT, 5 : REM THE GRASS
5120 FOR Y = 161 TO 179
5130     LINE 0, Y, 40, 179, 105
5140 NEXT Y
5150 FOR Y = 180 TO 150 STEP -1
5160     LINE 288,179, XLIMIT, Y, 105
5170 NEXT Y
5180 TC = 104:GOSUB 6000:REM DRAW GRASS STUFF
5190 TC = 106:GOSUB 6000
5200 TC = 133:GOSUB 6000
5210 RETURN
6000 FOR I = 1 TO 14:REM RANDOM GRASS
6110     X1 = INT(RND(1)*XLIMIT)
6120     Y1 = INT(RND(1)*YLIMIT) + 180:IF Y1 > YLIMIT THEN GOTO 6120
6130     X2 = INT(RND(1)*XLIMIT) + 15:IF X2 = X1 OR X2 > XLIMIT THEN GOTO 6130
6140     Y2 = INT(RND(1)*YLIMIT) + 180:IF Y2 = Y1 OR Y2 > YLIMIT THEN GOTO 6140
6145     IF X2 - X1 > 105 OR X1 - X2 > 105 THEN GOTO 6110
6146     IF Y2 - Y1 > 12 OR Y1 - Y2 > 12 THEN GOTO 6110
6150     LINE X1,Y1,X2,Y2, TC
6155     PSET X1, Y1 - 1, 133:PSET X1 , Y1-1, 104:PSET X2, Y1 - 3,107
6180 NEXT I
6190 RETURN

6500 RETURN:B1 = INT(RND(1)* XLIMIT/2)+1  
6510 B2 = INT(RND(1)* XLIMIT/3)+1
6520 B3 = INT(RND(1)* YLIMIT/3)+1
6530 B4 = INT(RND(1)* YLIMIT/4)+1
6540 FOR I = 1 TO 300
6550     X1 = INT(RND(1)*B1)+1
6560     X2 = INT(RND(1)*B2)+1
6570     Y1 = INT(RND(1)*B3)+1
6580     Y2 = INT(RND(1)*B4)+1
6590     C = INT(RND(1)*6)+1
6600     IF C = 1 THEN 
6600     IF C = 2 THEN C = 65
6610     IF C = 3 THEN C = 64
6620     IF C = 4 THEN C = 28
6630     IF C = 5 THEN C = 27
6640     IF C = 6 THEN C = 25
6650     RECT X1,Y1,X2,Y2, C
6660 NEXT I
6670 RETURN 






7000 REM THE GALLOWS
7010 FRAME 189,195,285,208,16
7020 FRAME 190,196,284,209,16
7030 FRAME 275,21,285,207,16
7040 FRAME 276,22,284,205,16
7050 FRAME 67,20,285,30,16
7060 FRAME 68,21,284,29,16
7070 RECT  71,30,79,33,16
7080 RECT  191,197,283,207,83
7090 RECT  277,23,283,206,83
7100 RECT  69,22,283,28,83
7150 RETURN

8000 REM THE ROPE
8010 LINE 73,33,73,53,16
8020 LINE 77,33,77,53,16
8030 RECT 74,34,76,53,87
8040 FOR Y = 38 TO 53 STEP 3
8050     LINE 73, Y, 77, Y - 3, 16
8060 NEXT Y
8070 FRAME 71,53,80, 68, 16
8080 RECT 72,54,79,68,87
8090 FOR Y = 56 TO 68 STEP 4
8100     LINE 72,Y,79, Y-4, 16
8110 NEXT Y
8120 REM THE NOOSE
8130 RA = 24
8140 YS = .38
8150 CX = 75:CY = 79:CC = 16
8160 GOSUB 3000:RA=25:GOSUB 3000
8165 RA = 24:GOSUB 3000
8170 RA = 19:GOSUB 3000
8175 RA = 18:GOSUB 3000
8180 CC = 87
8190 FOR X = 21 TO 23 STEP .7
8200     RA = X:GOSUB 3000
8210 NEXT X
9000 YS=0:RETURN

9499 REM THE FACE
9500 CX = 59:CY = 60:RA = 6:XS = .4:CC = 16
9510 GOSUB 3000:RA = RA - 1:GOSUB 3000
9520 RA = RA - 1:FILL = 1:CC = 37:GOSUB 3000

9530 CX = 89:RA = 6:CC=16
9540 GOSUB 3000:RA = RA - 1:GOSUB 3000
9550 RA = RA - 1:FILL = 1:CC = 37:GOSUB 3000

9560 LINE 67,76,67,84,16
9570 LINE 66,76,66,84,16
9580 LINE 67,87,67,90,16:LINE 66,87,66,90,16
9590 LINE 82,76,82,84,16
9600 LINE 83,76,83,84,16
9605 LINE 82,87,82,90,16:LINE 83,87,83,90,16
9610 RECT 68,76,81,84,37
9620 RECT 68,89,81,91,37
9630 RA = 20:XS = .8:FILL = 0
9640 CC = 16:CX = 74:CY = 63
9650 GOSUB 3000:RA = RA -1:GOSUB 3000
9660 RA = RA -1:GOSUB 3000:RA = RA -1:GOSUB 3000
9665 CY = CY - 1:GOSUB 3000:CY = CY -1:GOSUB 3000:CY=CY + 2
9670 RA = RA :CC = 37:FILL=1:CY = CY + 1:GOSUB 3000
9680 XS = 1:YS = XS
9690 CY = CY - 6:CX = CX - 6:RA=4:CC = 1:GOSUB 3000
9700 GOSUB 9950
9710 CX = CX + 12:GOSUB 3000
9720 GOSUB 9950
9900 RETURN

9950 PSET CX,CY, 16:PSET CX -1,CY,16
9955 PSET CX,CY -1,16:PSET CX - 1, CY -1 ,16
9960 RETURN


kelli217
Posts: 531
Joined: Sun Jul 05, 2020 11:27 pm

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by kelli217 »

CBM BASIC has a built in pi. On the emulator it's mapped to the tilde. It isn't just the symbol; it's actually recognized as a floating point constant. If you PRINT it, using
PRINT ~:REM ON EMULATOR AND HARDWARE THIS WILL APPEAR AS A PI SYMBOL
you get the value of pi.
3.14159265
User avatar
ahenry3068
Posts: 1136
Joined: Tue Apr 04, 2023 9:57 pm

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by ahenry3068 »

I appreciate the info. I didn't find that when I was searching.
I think I'm going to stay with PI from a code readability standpoint.
kelli217
Posts: 531
Joined: Sun Jul 05, 2020 11:27 pm

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by kelli217 »

ahenry3068 wrote: Tue May 30, 2023 9:52 pm I appreciate the info. I didn't find that when I was searching.
I think I'm going to stay with PI from a code readability standpoint.
Yes, it certainly is easier to understand than \XFF (which is how the -echo command line switch for the emulator displays the π symbol)...
User avatar
ahenry3068
Posts: 1136
Joined: Tue Apr 04, 2023 9:57 pm

FINISHED FACE, STARTED TORSO

Post by ahenry3068 »

I finished the Hanged Man's face. (Until I decide to tweak the code...lol)
I started on the Torso.

I'm thinking of Orange for the prison uniform (Orange is the New Black !!).
When I wrote this game ages and ages ago in QBasic I had a striped uniform
but I used a Bitmap FILL for that. In CBM if I go with stripes I've only
got LINE to work with. THAT PARAGRAPH WAS A REQUEST FOR COMMENT.. ? :)

Code execution for the entire scene is approximately 40 seconds. And its always "Busy"
drawing so no chance of a player thinking the game crashed. When game logic is
implemented only snippets of the drawing will be done at 1 time. 7 to 10 second delay
in play at most. Since this is not an action game I deem that acceptable.

Ok so here is the current code.

Code: Select all

10 CLS:PRINT
15 XLIMIT = 319:YLIMIT=239
20 PI = 3.1416 
25 Q1 = 1:Q2 = 1:Q3 = 1:Q4 = 1

35 PRINT "WELCOME TO HANGMAN"
40 PRINT " ONE PLAYER AGAINST THE COMPUTER ?
45 PRINT " OR HEAD TO HEAD ?"

55 SCREEN 128
60 GOSUB 5000 : REM BACKGROUND
65 GOSUB 7000 : REM GALLOWS
70 GOSUB 8000 : REM ROPE
80 GOSUB 9500 : REM THE GUYS HEAD
85 GOSUB 10000 : REM THE TORSO
95 INPUT X$
100 SCREEN 0:END

2999 REM CIRCLE AND ELLIPSE SUBROUTINE
3000 Q = 1 / RA
3010 IF FILL = 1 THEN Q = .3/RA
3030 FOR I = 0 TO PI / 2 STEP Q
3040    DY = SIN(I) * RA
3050    IF YS > 0 AND YS < 1 THEN DY = DY*YS
3060    DX = COS(I) * RA
3070    IF XS > 0 AND XS < 1 THEN DX = DX*XS
3080    ZX = INT(CX - DX)
3090    ZY = INT(CY - DY)
3100    AX = INT(CX + DX)
3110    AY = INT(CY + DY)
3115    IF FILL = 1 THEN 3220
3120    IF AX<0 OR AX > XLIMIT OR AY<0 OR AY > YLIMIT OR Q4 = 0 THEN 3140
3130    PSET AX, AY, CC
3140    IF ZX<0 OR ZX>XLIMIT OR AY < 0 OR AY > YLIMIT OR Q3 = 0 THEN 3160
3150    PSET ZX, AY, CC
3160    IF AX<0 OR AX > XLIMIT OR ZY<0 OR ZY > YLIMIT OR Q2 = 0 THEN 3180
3170    PSET AX, ZY, CC
3180    IF ZX<0 OR ZX > XLIMIT OR ZY<0 OR ZY > YLIMIT OR Q1 = 0 THEN 3300
3190    PSET ZX, ZY, CC
3200    GOTO 3300
3220    IF Q4<> 0 THEN LINE CX,CY,AX,AY,CC
3225    IF Q3<> 0 THEN LINE CX,CY,ZX,AY,CC
3230    IF Q2<> 0 THEN LINE CX,CY,AX,ZY,CC
3235    IF Q1<> 0 THEN LINE CX,CY,ZX,ZY,CC 
3300 NEXT I
3310 RETURN 

5000 RECT 0,0, XLIMIT, YLIMIT, 14 : REM THE SKY
5010 CX = 5:CY=4:CC = 16:FILL = 0:XS=0:YS=0:RA = 33
5020 GOSUB 3000:RA=RA-1:GOSUB 3000
5030 CC = 7:
5040 FOR RA = 31 TO 1 STEP -1:GOSUB 3000:NEXT RA
5050 GOSUB 6500:REM DRAW A CLOUD
5110 RECT 0, 180, XLIMIT, YLIMIT, 5 : REM THE GRASS
5120 FOR Y = 161 TO 179
5130     LINE 0, Y, 40, 179, 105
5140 NEXT Y
5150 FOR Y = 180 TO 150 STEP -1
5160     LINE 288,179, XLIMIT, Y, 105
5170 NEXT Y
5180 TC = 104:GOSUB 6000:REM DRAW GRASS STUFF
5190 TC = 106:GOSUB 6000
5200 TC = 133:GOSUB 6000
5210 RETURN
6000 FOR I = 1 TO 14:REM RANDOM GRASS
6110     X1 = INT(RND(1)*XLIMIT)
6120     Y1 = INT(RND(1)*YLIMIT) + 180:IF Y1 > YLIMIT THEN GOTO 6120
6130     X2 = INT(RND(1)*XLIMIT) + 15:IF X2 = X1 OR X2 > XLIMIT THEN GOTO 6130
6140     Y2 = INT(RND(1)*YLIMIT) + 180:IF Y2 = Y1 OR Y2 > YLIMIT THEN GOTO 6140
6145     IF X2 - X1 > 105 OR X1 - X2 > 105 THEN GOTO 6110
6146     IF Y2 - Y1 > 12 OR Y1 - Y2 > 12 THEN GOTO 6110
6150     LINE X1,Y1,X2,Y2, TC
6155     PSET X1, Y1 - 1, 133:PSET X1 , Y1-1, 104:PSET X2, Y1 - 3,107
6180 NEXT I
6190 RETURN

6500 RETURN:B1 = INT(RND(1)* XLIMIT/2)+1  
6510 B2 = INT(RND(1)* XLIMIT/3)+1
6520 B3 = INT(RND(1)* YLIMIT/3)+1
6530 B4 = INT(RND(1)* YLIMIT/4)+1
6540 FOR I = 1 TO 300
6550     X1 = INT(RND(1)*B1)+1
6560     X2 = INT(RND(1)*B2)+1
6570     Y1 = INT(RND(1)*B3)+1
6580     Y2 = INT(RND(1)*B4)+1
6590     C = INT(RND(1)*6)+1
6600     IF C = 1 THEN 
6600     IF C = 2 THEN C = 65
6610     IF C = 3 THEN C = 64
6620     IF C = 4 THEN C = 28
6630     IF C = 5 THEN C = 27
6640     IF C = 6 THEN C = 25
6650     RECT X1,Y1,X2,Y2, C
6660 NEXT I
6670 RETURN 

7000 REM THE GALLOWS
7010 FRAME 189,195,285,208,16
7020 FRAME 190,196,284,209,16
7030 FRAME 275,21,285,207,16
7040 FRAME 276,22,284,205,16
7050 FRAME 67,20,285,30,16
7060 FRAME 68,21,284,29,16
7070 RECT  71,30,79,33,16
7080 RECT  191,197,283,207,83
7090 RECT  277,23,283,206,83
7100 RECT  69,22,283,28,83
7150 RETURN

8000 REM THE ROPE
8010 LINE 73,33,73,53,16
8020 LINE 77,33,77,53,16
8030 RECT 74,34,76,53,87
8040 FOR Y = 38 TO 53 STEP 3
8050     LINE 73, Y, 77, Y - 3, 16
8060 NEXT Y
8070 FRAME 71,53,80, 68, 16
8080 RECT 72,54,79,68,87
8090 FOR Y = 56 TO 68 STEP 4
8100     LINE 72,Y,79, Y-4, 16
8110 NEXT Y
8120 REM THE NOOSE
8130 RA = 24
8140 YS = .38
8150 CX = 75:CY = 79:CC = 16
8160 GOSUB 3000:RA=25:GOSUB 3000
8165 RA = 24:GOSUB 3000
8170 RA = 19:GOSUB 3000
8175 RA = 18:GOSUB 3000
8180 CC = 87
8190 FOR X = 21 TO 23 STEP .7
8200     RA = X:GOSUB 3000
8210 NEXT X
9000 YS=0:RETURN

9499 REM THE FACE
9500 CX = 59:CY = 60:RA = 6:XS = .4:CC = $10
9510 GOSUB 3000:RA = RA - 1:GOSUB 3000
9520 RA = RA - 1:FILL = 1:CC = $25:GOSUB 3000
9530 CX = 89:RA = 6:CC=16
9540 GOSUB 3000:RA = RA - 1:GOSUB 3000
9550 RA = RA - 1:FILL = 1:CC = 37:GOSUB 3000
9555 REM DRAW HIS NECK 
9560 LINE 67,76,67,84,$10
9570 LINE 66,76,66,84,$10
9580 LINE 67,87,67,90,$10:LINE 66,87,66,90,$10
9590 LINE 82,76,82,84,$10
9600 LINE 83,76,83,84,$10
9605 LINE 82,87,82,90,$10:LINE 83,87,83,90,$10
9610 RECT 68,76,81,84,$25
9620 RECT 68,89,81,90,$25
9621 REM END NECK
9630 RA = 20:XS = .8:FILL = 0
9640 CC = $10:CX = 74:CY = 63
9650 GOSUB 3000:RA = RA -1:GOSUB 3000
9660 RA = RA -1:GOSUB 3000:RA = RA -1:GOSUB 3000
9665 CY = CY - 1:GOSUB 3000:CY = CY -1:GOSUB 3000:CY=CY + 2
9670 RA = RA :CC = 37:FILL=1:CY = CY + 1:GOSUB 3000
9680 XS = 1:YS = XS
9690 CY = CY - 6:CX = CX - 6:RA=4:CC = $01:GOSUB 3000
9700 GOSUB 9950:REM THE PUPILS OF HIS EYES 
9710 CX = CX + 12:GOSUB 3000
9720 GOSUB 9950:CX = 74:CY = 63
9730 LINE CX-1,CY, CX - 2, CY + 6, $10
9740 LINE CX+1,CY, CX + 2, CY + 6, $10
9750 LINE CX,CY,CX -1, CY + 6, $23
9760 LINE CX,CY,CX + 1, CY + 6, $23
9770 LINE CX,CY+3,CX,CY+6,$22
9780 Q3=0:Q4=0:CC=$10:CY = CY + 13:YS=.35:RA=6:FILL=0
9790 GOSUB 3000  
9800 CY = CY + 1:CC=$31:GOSUB 3000
9805 CY = CY + 1:CC=$10:GOSUB 3000
9806 Q3=1:Q4=1:YS=0: REM REMEMBER TO TURN CIRCLE FULLY ON !!!
9810 RETURN
9949 REM THE PUPILS 
9950 PSET CX,CY, 16:PSET CX -1,CY,16
9955 PSET CX,CY -1,16:PSET CX - 1, CY -1 ,16
9960 RETURN

9999 REM THE TORSO
10000 LINE 82,90,102,93, $10
10010 LINE 83,91,102,94, $10
10020 LINE 68,90,48,93, $10
10030 LINE 69,91,48,94, $10
10040 LINE 67,90,74,105, $10
10050 LINE 83,90,74,105,$10
10060 FOR X = 81 TO 68 STEP -1
10070     LINE 75,103,X, 90, $25
10080 NEXT X
10500 RETURN 

Edmond D
Posts: 489
Joined: Thu Aug 19, 2021 1:42 am

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by Edmond D »

I see the progress as you work on the graphics, which look nice. I was going to suggest a background bitmap for all the static graphic parts, but the code runs at an acceptable pace in the web emulator. Each body part (one so far) doesn't seem to take long either. I assume that you'll finish the graphics then work on the play engine after the "eye candy" is completed. I look forward to future revisions!
User avatar
ahenry3068
Posts: 1136
Joined: Tue Apr 04, 2023 9:57 pm

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by ahenry3068 »

I'm glad to see some interest. I thought about doing bitmaps but maybe that will be for
a future upgrade. If I get going on bitmaps I'll want multiple bitmaps available
as Game options... :) Honestly a lot of this is not truly original work. It is MY work
but I'm reprising stuff I did along time ago in GW-BASIC and QBASIC.


And yes.. I did plan on programming the Game Logic after I get the Eye Candy done :)
User avatar
ahenry3068
Posts: 1136
Joined: Tue Apr 04, 2023 9:57 pm

LOST ALL MY OLD ARCHIVES.

Post by ahenry3068 »

I would have had copies of the Original code I wrote on a 3 1/2 inch floppy or CDRW somewhere until
SEP 10th, 2017. I even still had hard copy wide format DOT MATRIX print outs of all the
code I wrote in the 80's in the Navy on the SNAP II. (Harris Systems "Mini"-computer).
I put "Mini" in quotes because a Millennial might think I'm talking about an Arduino or maybe a
Smart Phone... These were "Mini" as in somewhat smaller than an actual MainFrame.

On that day my residence was completely destroyed by Hurricane Irma.
A couple of boxs of Family Photo's and all of my old computer archives I count
as my biggest loss (Plus a 20 year collection of nice sweaters). Even though
they had little monetary value they were the most irreplaceable things I owned.
User avatar
ahenry3068
Posts: 1136
Joined: Tue Apr 04, 2023 9:57 pm

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by ahenry3068 »

OK. A lots of trial and error to get the right display.
Its a perfect illustration of why I can't go immediately to
the MidPoint algorithm recommended by Tom.

Its kinda cool I can do Cartoonish figures with just
circles Arc and Rectangles.
kelli217
Posts: 531
Joined: Sun Jul 05, 2020 11:27 pm

Re: NEW GAME IN BASIC... HANGMAN EARLY DAYS.

Post by kelli217 »

A minicomputer was one that could fit in just a single floor-to-ceiling rack unit!
Post Reply