Kombat! by Baywolfe25th Nov 2006 22:40
|
---|
Summary A short 2 fighter combat example for use in RPG's, etc. Description A 2 Fighter combat program. This is a stand-alone program but is intended to be used as an example for larger programs. Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com `Kombat! - Simple Combat Program `by Michael Talley `Freely available as OpenSource `NOTE - THERE IS NO ERROR CHECKING IN THIS CODE!!!!!!!!!!!!!!!!!!! `Standard Setup Code SET DISPLAY MODE 640, 480, 32 COLOR BACKDROP RGB(0, 0, 128) : HIDE MOUSE SET TEXT FONT "Microsoft Sans Serif" : SET TEXT SIZE 14 TYPE KOMBATANT Name AS STRING HP AS INTEGER MaxHP AS INTEGER Armor AS INTEGER PrimaryWeapon AS INTEGER Shield AS INTEGER ENDTYPE DIM Fighters(2) AS KOMBATANT DIM Armor(3) AS STRING DIM Weapon(3) AS STRING DIM Shield(3) AS STRING Initiative = 0 GOSUB GameLoop END FUNCTION Header CLS PRINT "Kombat!" PRINT "------------" PRINT " " ENDFUNCTION FUNCTION Setup FighterName AS STRING Armor(0) = "Robes" Armor(1) = "Leather" Armor(2) = "Mail" Weapon(0) = "Fist" Weapon(1) = "Rusty Knife" Weapon(2) = "Sword" Shield(0) = "Nothing" Shield(1) = "Wooden" Shield(2) = "Iron" PRINT "Time to set up your fighters." PRINT "Press Any Key to Continue..." WAIT KEY FOR Counter = 0 TO 1 Header( ) PRINT "To accept defaults, you may press the Enter key without entering any values." PRINT " " INPUT "What is the name of fighter #", Counter + 1, "? ", Fighters(Counter).Name IF LEN(Fighters(Counter).Name) = 0 Fighters(Counter).Name = "Fighter #" + STR$(Counter + 1) ENDIF PRINT " " FOR X = 0 TO 2 PRINT X, " - ", Armor(X) NEXT X INPUT "Select Armor for ", Fighters(Counter).Name, ": ", Fighters(Counter).Armor PRINT " " FOR X = 0 TO 2 PRINT X, " - ", Weapon(X) NEXT X INPUT "Select Weapon for ", Fighters(Counter).Name, ": ", Fighters(Counter).PrimaryWeapon PRINT " " FOR X = 0 TO 2 PRINT X, " - ", Shield(X) NEXT X INPUT "Select Shield for ", Fighters(Counter).Name, ": ", Fighters(Counter).Shield Fighters(Counter).MaxHP = 20 Fighters(Counter).HP = 20 NEXT Counter ENDFUNCTION FUNCTION ShowStats Header( ) FOR X = 0 TO 1 PRINT "Stats for ", Fighters(X).Name PRINT "Armor: ", Armor(Fighters(X).Armor) PRINT "Weapon: ", Weapon(Fighters(X).PrimaryWeapon) PRINT "Shield: ", Shield(Fighters(X).Shield) PRINT "Max Hit Points: ", Fighters(X).MaxHP PRINT "Current Hit Points: ", Fighters(X).HP PRINT " " NEXT X ENDFUNCTION FUNCTION Kombat(Counter) IF Counter = 1 Header( ) ShowStats( ) PRINT "First we roll for initiative" PRINT "Press any key to roll..." WAIT KEY a = RND(20) PRINT Fighters(0).Name, " rolls - ", a b = RND(20) PRINT Fighters(1).Name, " rolls - ", b IF a > b Initiative = 0 PRINT Fighters(0).Name, " has initiative throughout the Kombat!" ELSE IF b > a Initiative = 1 PRINT Fighters(1).Name, " has initiative throughout the Kombat!" ELSE Initiative = -1 PRINT "Simultaneous attacks throughout the Kombat!" ENDIF ENDIF PRINT " " PRINT "Press any key to begin The Kombat!" WAIT KEY Header( ) ShowStats( ) ENDIF SELECT Initiative CASE 0 roll = RND(20) IF roll >= 10 + Fighters(1).Armor + Fighters(1).Shield hit = RND(4) + 1 + (Fighters(0).PrimaryWeapon * 2) Fighters(1).HP = Fighters(1).HP - hit PRINT Fighters(0).Name, " hits for ", hit ELSE PRINT Fighters(0).Name, " misses" ENDIF IF Fighters(1).HP > 0 roll = RND(20) IF roll >= 10 + Fighters(0).Armor + Fighters(1).Shield hit = RND(4) + 1 + (Fighters(1).PrimaryWeapon * 2) Fighters(0).HP = Fighters(0).HP - hit PRINT Fighters(1).Name, " hits for ", hit ELSE PRINT Fighters(1).Name, " misses" ENDIF ENDIF ENDCASE CASE 1 roll = RND(20) IF roll >= 10 + Fighters(0).Armor + Fighters(1).Shield hit = RND(4) + Fighters(1).PrimaryWeapon * 2 Fighters(0).HP = Fighters(0).HP - hit PRINT Fighters(1).Name, " hits for ", hit ELSE PRINT Fighters(1).Name, " misses" ENDIF IF Fighters(0).HP > 0 roll = RND(20) IF roll >= 10 + Fighters(1).Armor + Fighters(1).Shield hit = RND(4) + Fighters(0).PrimaryWeapon * 2 Fighters(1).HP = Fighters(1).HP - hit PRINT Fighters(0).Name, " hits for ", hit ELSE PRINT Fighters(0).Name, " misses" ENDIF ENDIF ENDCASE CASE DEFAULT roll = RND(20) IF roll >= 10 + Fighters(1).Armor + Fighters(1).Shield hit = RND(4) + Fighters(0).PrimaryWeapon * 2 Fighters(1).HP = Fighters(1).HP - hit PRINT Fighters(0).Name, " hits for ", hit ELSE PRINT Fighters(0).Name, " misses" ENDIF roll = RND(20) IF roll >= 10 + Fighters(0).Armor + Fighters(1).Shield hit = RND(4) + Fighters(1).PrimaryWeapon * 2 Fighters(0).HP = Fighters(0).HP - hit PRINT Fighters(1).Name, " hits for ", hit ELSE PRINT Fighters(1).Name, " misses" ENDIF ENDCASE ENDSELECT ENDFUNCTION FUNCTION GameLoop LoopCounter = 0 Header( ) Setup( ) Header( ) ShowStats( ) REPEAT LoopCounter = LoopCounter + 1 PRINT "Press any key to begin Kombat! Round #", LoopCounter WAIT KEY Header( ) ShowStats( ) Kombat(LoopCounter) UNTIL Fighters(0).HP <= 0 OR Fighters(1).HP <= 0 PRINT "A deadly blow has been struck. Press any key for the conclusion." WAIT KEY IF Fighters(0).HP <= 0 Header( ) ShowStats( ) PRINT Fighters(0).Name, " is dead." ENDIF IF Fighters(1).HP <= 0 Header( ) ShowStats( ) PRINT Fighters(1).Name, " is dead." ENDIF PRINT " " PRINT "Press any key to end program." WAIT KEY ENDFUNCTION |