My kingdom for a tutorial!!!

Blitz3D Forums/Blitz3D Beginners Area/My kingdom for a tutorial!!!

leeluna(Posted 2004) [#1]
Hi,

Got this far by having no shame and knicking code from a guy called James Eibisch, He has done a really cool retro space invaders in QBASIC. But now I am stuck mega catch 22.
I do not know enough about QBASIC to rip the rest of James's code and I do not understand BB3D well enough to proceed.

So is anybody up for creating a tutorial for good old fashioned Space Invaders?
Global Tru = -1
Global Fals = Not Tru

Global screenwidth = 256
Global screenorgx = 32
Global shipwidth = 30
Global shipheight = 16
Global bulletheight = 3
Global invwidth = 24
Global invheight = 16
Global invbombheight = 10
Global invbombwidth = 6
Global saucerwidth = 32
Global saucerheight = 14
Global shelterwidth = 48
Global shelterheight = 32
Global shipminx = 50
Global shipmaxx = 270 - shipwidth
Global bulletd = 3
Global invdiry = 7
Global invzaptime = 15
Global saucery = 28
Global sheltery = 156

Global shipg,shipexpg,invg1,invg2,invg3,invexpg,invbombg,saucerg,shelterg,charset


Graphics 640,480,0
SetBuffer FrontBuffer() 
Cls
DefineGraphics()
DrawImage shipg,100,50
DrawImage shelterg,90,70
DrawImage shipexpg,132,50,0
DrawImage shipexpg,164,50,1
DrawImage invg1,200,50,0
DrawImage invg1,230,50,1
DrawImage invg2,200,70,0
DrawImage invg2,230,70,1
DrawImage invg3,200,90,0
DrawImage invg3,230,90,1
DrawImage invexpg,260,50
DrawImage invbombg,290,50,0
DrawImage invbombg,290,70,1
DrawImage saucerg,300,50
i=0
For x=50 To 290 Step 12
	i=i+1
		DrawImage charset,x,120,i-1
Next

WaitKey()

End

Function DefineGraphics()
;define ship
	shipg=CreateImage(shipwidth,shipheight)
	Cls
	For y = 1 To shipheight
		Read a$
		Color 0,160,0
		For x = 1 To shipwidth
			If Mid$(a$, x, 1) = "#" Then Plot x, y
		Next
	Next
	GrabImage shipg,1,1 

;define ship explosion
	shipexpg=CreateImage(shipwidth-1,shipheight-1,2)
	For i = 1 To 2
		Cls
		For y = 1 To shipheight
			Read a$
			Color 0, 160, 0
			For x = 1 To shipwidth
				If Mid$(a$, x, 1) = "#" Then Plot x, y
			Next
		Next
		GrabImage shipexpg,1,1,i-1
	Next

;define invaders
	invg1=CreateImage(invwidth-1,invheight-1,2)
	invg2=CreateImage(invwidth-1,invheight-1,2)
	invg3=CreateImage(invwidth-1,invheight-1,2)
	Cls
	For invtype = 0 To 2 ; 3 types of invader
		For anim = 0 To 1 ; 2 frames of animation
			Cls
			For y = 1 To invheight
				Read a$
				Color 200,200,200
				For x = 1 To invwidth
					If Mid$(a$, x, 1) = "#" Then Plot x, y
				Next
			Next
		Select invtype
			Case 0
				GrabImage invg1,1,1,anim
			Case 1
				GrabImage invg2,1,1,anim
			Case 2
				GrabImage invg3,1,1,anim
			Default
		End Select
		Next 
	Next 

;define invader explosion
	invexpg=CreateImage(invwidth-1,invheight-1)
	Cls
	For y = 1 To invheight
		Read a$
		Color 200, 200, 200	
		For x = 1 To invwidth
			If Mid$(a$, x, 1) = "#" Then Plot x, y
		Next
	Next
	GrabImage invexpg,1,1
	
;define bombs
	invbombg=CreateImage(invbombwidth,invbombheight,2)
	Cls
	For i = 1 To 2
		For y = 1 To invbombheight
			Read a$
			Color 220, 220, 220
			For x = 1 To invbombwidth
				If Mid$(a$, x, 1) = "#" Then Plot x, y
			Next
		Next
		GrabImage invbombg,1,1,i-1
		Cls
	Next

;define saucer
	saucerg=CreateImage(saucerwidth,saucerheight)
	Cls
	For y = 1 To saucerheight
		Read a$
		Color 160, 0, 0
		For x = 1 To saucerwidth
			If Mid$(a$, x, 1) = "#" Then Plot x, y
		Next
	Next
	GrabImage saucerg,1,1
	
;define shelter
	shelterg=CreateImage(shelterwidth,shelterheight)
	Cls
	For y = 1 To shelterheight
		Read a$
		Color 0, 160, 0
		For x = 1 To shelterwidth
			If Mid$(a$, x, 1) = "#" Then Plot x, y
		Next
	Next
	GrabImage shelterg,1,1
		
;define character set
	charset=CreateImage(10,16,21)
	Cls
	For i = 1 To 21
		For y = 1 To 14
			Read a$
			Color 200, 200, 200
			For x = 1 To 10
				If Mid$(a$, x, 1) = "#" Then Plot x, y
			Next
		Next
		GrabImage charset,1,1,i-1
		Cls
	Next
	Cls
End Function



.seconddata 
Data "              ##              "
Data "              ##              "
Data "            ######            "
Data "            ######            "
Data "            ######            "
Data "            ######            "
Data "  ##########################  "
Data "  ##########################  "
Data "##############################"
Data "##############################"
Data "##############################"
Data "##############################"
Data "##############################"
Data "##############################"
Data "##############################"
Data "##############################"

Data "        ##                    "
Data "        ##                    "
Data "    ##          ##        ##  "
Data "    ##          ##        ##  "
Data "        ##    ##    ##        "
Data "        ##    ##    ##        "
Data "    ##            ##  ##      "
Data "    ##            ##  ##      "
Data "          ##  ####      ##    "
Data "          ##  ####      ##    "
Data "##    ################        "
Data "##    ################        "
Data "    ####################      "
Data "    ####################      "
Data "  ########################    "
Data "  ########################    "

Data "    ##          ##        ##  "
Data "    ##          ##        ##  "
Data "        ##                    "
Data "        ##                    "
Data "    ##          ##        ##  "
Data "    ##          ##        ##  "
Data "              ##    ##        "
Data "              ##    ##        "
Data "  ##      ####  ##          ##"
Data "  ##      ####  ##          ##"
Data "      ################    ##  "
Data "      ################    ##  "
Data "    ####################      "
Data "    ####################      "
Data "  ########################    "
Data "  ########################    "

Data "        ########        "
Data "        ########        "
Data "    ################    "
Data "    ################    "
Data "########################"
Data "########################"
Data "######    ####    ######"
Data "######    ####    ######"
Data "########################"
Data "########################"
Data "      ####    ####      "
Data "      ####    ####      "
Data "    ####  ####  ####    "
Data "    ####  ####  ####    "
Data "####                ####"
Data "####                ####"

Data "        ########        "
Data "        ########        "
Data "    ################    "
Data "    ################    "
Data "########################"
Data "########################"
Data "######    ####    ######"
Data "######    ####    ######"
Data "########################"
Data "########################"
Data "    ######    ######    "
Data "    ######    ######    "
Data "  ####    ####    ####  "
Data "  ####    ####    ####  "
Data "    ####        ####    "
Data "    ####        ####    "

Data "##  ##          ##      "
Data "##  ##          ##      "
Data "##    ##      ##    ##  "
Data "##    ##      ##    ##  "
Data "##  ##############  ##  "
Data "##  ##############  ##  "
Data "######  ######  ######  "
Data "######  ######  ######  "
Data "######################  "
Data "######################  "
Data "  ##################    "
Data "  ##################    "
Data "    ##          ##      "
Data "    ##          ##      "
Data "  ##              ##    "
Data "  ##              ##    "    

Data "    ##          ##      "
Data "    ##          ##      "
Data "      ##      ##        "
Data "      ##      ##        "
Data "    ##############      "
Data "    ##############      "
Data "  ####  ######  ####    "
Data "  ####  ######  ####    "
Data "######################  "
Data "######################  "
Data "##  ##############  ##  "
Data "##  ##############  ##  "
Data "##  ##          ##  ##  "
Data "##  ##          ##  ##  "
Data "      ####  ####        "
Data "      ####  ####        " 

Data "          ####          "
Data "          ####          "
Data "        ########        "
Data "        ########        "
Data "      ############      "
Data "      ############      "
Data "    ####  ####  ####    "
Data "    ####  ####  ####    "
Data "    ################    "
Data "    ################    "
Data "        ##    ##        "
Data "        ##    ##        "
Data "      ##  ####  ##      "
Data "      ##  ####  ##      "
Data "    ##  ##    ##  ##    "
Data "    ##  ##    ##  ##    "

Data "          ####          "
Data "          ####          "
Data "        ########        "
Data "        ########        "
Data "      ############      "
Data "      ############      "
Data "    ####  ####  ####    "
Data "    ####  ####  ####    "
Data "    ################    "
Data "    ################    "
Data "      ##  ####  ##      "
Data "      ##  ####  ##      "
Data "    ##            ##    "
Data "    ##            ##    "
Data "      ##        ##      "
Data "      ##        ##      "

Data "          ##    ##      "
Data "          ##    ##      "
Data "    ##    ##    ##    ##"
Data "    ##    ##    ##    ##"
Data "      ##      ##    ##  "
Data "      ##      ##    ##  "
Data "######                  "
Data "######                  "
Data "        ##          ####"
Data "        ##          ####"
Data "    ####        ##      "
Data "    ####        ##      "
Data "  ##        ##    ##    "
Data "  ##        ##    ##    "
Data "            ##      ##  "
Data "            ##      ##  "

Data "  ##  "
Data "  ##  "
Data "  ##  "
Data "  ##  "
Data "  ##  "
Data "  ##  "
Data "######"
Data "######"
Data "  ##  "
Data "  ##  "

Data "  ##  "
Data "  ##  "
Data "##    "
Data "##    "
Data "  ##  "
Data "  ##  "
Data "    ##"
Data "    ##"
Data "  ##  "
Data "  ##  "

Data "          ############          "
Data "          ############          "
Data "      ####################      "
Data "      ####################      "
Data "    ########################    "
Data "    ########################    "
Data "  ####  ####  ####  ####  ####  "
Data "  ####  ####  ####  ####  ####  "
Data "################################"
Data "################################"
Data "    ######            ######    "
Data "    ######            ######    "
Data "      ##                ##      "
Data "      ##                ##      "


Data "      ####################################      "
Data "      ####################################      "
Data "    ########################################    "
Data "    ########################################    "
Data "  ############################################  "
Data "  ############################################  "
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "################################################"
Data "##############                    ##############"
Data "##############                    ##############"
Data "############                        ############"
Data "############                        ############"
Data "##########                            ##########"
Data "##########                            ##########"
Data "##########                            ##########"
Data "##########                            ##########"

Data "    ##    "
Data "    ##    "
Data "  ##  ##  "
Data "  ##  ##  "
Data "##      ##"
Data "##      ##"
Data "##########"
Data "##########"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "##########"
Data "##########"
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "########  "
Data "########  "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##########"
Data "##########"

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##        "
Data "##        "
Data "##  ######"
Data "##  ######"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "  ######  "
Data "  ######  "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "  ######  "
Data "  ######  "

Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##########"
Data "##########"

Data "##      ##"
Data "##      ##"
Data "####  ####"
Data "####  ####"
Data "##  ##  ##"
Data "##  ##  ##"
Data "##  ##  ##"
Data "##  ##  ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "########  "
Data "########  "
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "########  "
Data "########  "
Data "##  ##    "
Data "##  ##    "
Data "##    ##  "
Data "##    ##  "
Data "##      ##"
Data "##      ##"

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##        "
Data "##        "
Data "  ######  "
Data "  ######  "
Data "        ##"
Data "        ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ##  ##  "
Data "  ##  ##  "
Data "    ##    "
Data "    ##    "

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##    ####"
Data "##    ####"
Data "##  ##  ##"
Data "##  ##  ##"
Data "####    ##"
Data "####    ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "    ##    "
Data "    ##    "
Data "  ####    "
Data "  ####    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "    ##    "
Data "  ######  "
Data "  ######  "

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "        ##"
Data "        ##"
Data "  ######  "
Data "  ######  "
Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##########"
Data "##########"

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "        ##"
Data "        ##"
Data "    ####  "
Data "    ####  "
Data "        ##"
Data "        ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "##        "
Data "##        "
Data "##        "
Data "##        "
Data "##    ##  "
Data "##    ##  "
Data "##########"
Data "##########"
Data "      ##  "
Data "      ##  "
Data "      ##  "
Data "      ##  "
Data "      ##  "
Data "      ##  "

Data "##########"
Data "##########"
Data "##        "
Data "##        "
Data "########  "
Data "########  "
Data "        ##"
Data "        ##"
Data "        ##"
Data "        ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##        "
Data "##        "
Data "########  "
Data "########  "
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "##########"
Data "##########"
Data "        ##"
Data "        ##"
Data "      ##  "
Data "      ##  "
Data "    ##    "
Data "    ##    "
Data "  ##      "
Data "  ##      "
Data "  ##      "
Data "  ##      "
Data "  ##      "
Data "  ##      "

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "

Data "  ######  "
Data "  ######  "
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "##      ##"
Data "  ########"
Data "  ########"
Data "        ##"
Data "        ##"
Data "##      ##"
Data "##      ##"
Data "  ######  "
Data "  ######  "


Here's Hoping
Maybe in the news letter?

Luna.


CS_TBL(Posted 2004) [#2]
whoa! well, you've surely enough paper to wipe your ass, when you print all this stuff. :)


RiverRatt(Posted 2004) [#3]
I suggest you learn how to code in blitz


big10p(Posted 2004) [#4]
What's Space Invaders?


RiverRatt(Posted 2004) [#5]
looks like a game about numbers with all the ###########and all


Neo Genesis10(Posted 2004) [#6]
Not entirely sure why you're using Data statements to create your characters when you could load a bitmap to do the job easier...
Global invader = LoadImage("alien.bmp")
Global hero = LoadImage("spaceship.bmp")
A little tip would be to use types (linked lists) for your alien spaceships. Types tend to confuse those new to the language, but they're a simple concept really. Think of it as a set of items. You know where the top one is, but you dont know how many are in the set. You can pull them out one by one to count them, but there is no limit to the number that may be in there. A more practical example would be this:
Type aliens
	Field x, y	; Coordinates of alien
	Field score	; Points scored for killing
End Type

Restore alien_positions
For x = 1 To alien_count
	alien.aliens = New aliens
	Read alien\x
	Read alien\y
	Read alien\score
Next

For a.aliens = Each aliens
	KillAlien( a )
Next

Function KillAlien( a.aliens )
	Delete a
End Function
All this code does is use data statements to built a 'database' of aliens and then loops through and wipes them out. There are more in-depth tutorials on types available, but thats pretty much the basics. There used to be a space invaders tutorial on my website - I'll see if I can dig it out sometime.


Gabriel(Posted 2004) [#7]
Actually, Eikon already wrote a really nice tutorial on making a space invaders game :

http://www.blitzcoder.com/cgi-bin/articles/show_article.pl?f=eikon09252002092137.html


And Krylar wrote one on making an asteroids game in Blitz :

http://www.blitzcoder.com/cgi-bin/articles/show_article.pl?f=gamekrylar11032000.html


There are plenty more tutorials and articles over on Blitzcoder, focussing on the language, but those 2 seemed like they might be useful.


leeluna(Posted 2004) [#8]
CS_TBL
whoa! well, you've surely enough paper to wipe your ass, when you print all this stuff. :)

This is a fact. It could measure up to ANDREX.

RiverRat
I suggest you learn how to code in blitz

Asking for help and requesting a tutorial shows I am attempting to do just that.

Neo Genesis10
Not entirely sure why you're using Data statements to create your characters when you could load a bitmap to do the job easier...

I was basically attempting to replicate the QBASIC code but this has proved to be a bit beyond me. Thanks for the info on types I will try to implement this approach.

Sybixsus
Thanks for the links, both are very good and will help me a great deal, also the links in the second link to the free graphics is going to save my fingers from doing all the DATA typing. Now I can load good graphics using the method Neo Genesis10 has explained to me.

Thanks for all your help everyone.

Luna.