fb:porticula NoPaste
Schach 0.0.0.1 :)
Uploader: | MilkFreeze |
Datum/Zeit: | 21.12.2011 15:03:07 |
'Benötigt meine LinkedList, hier zu finden: http://www.freebasic-portal.de/porticula/doppelt-verkette-liste-bugfix-2-1256.html
'ist in wenigen minuten hingerotzt, also nicht über die codequalität wundern.
'Grafiken müssen in "img/" abgelegt werden
'meine Beta-Grafiken lege ich aber nicht dazu - die sind zu schlecht :)
#include once "list.bi"
Enum Boolean
False = 0
True = Not False ' equals to -1
End Enum
const tile_size = 48
const field_size = 8*tile_size
dim shared bauer_gfx as byte ptr
dim shared turm_gfx as byte ptr
dim shared background as byte ptr
dim as integer switch, i
screenres field_size+240,field_size+32,32
bauer_gfx = imagecreate(48,48)
background = imagecreate(field_size+240,field_size+32)
bload("img/bauer.bmp", bauer_gfx)
turm_gfx = imagecreate(48,48)
bload("img/turm.bmp", turm_gfx)
'Zeichnen des Spielfeldes:
paint background,(1,1), &h999998
line background,(8,8)-(24+field_size,24+field_size), &hAB4500,BF
for i = 0 to 8
line background,(i*tile_size+16,16)-(i*tile_size+16,field_size+16),&h999999
line background,(16,i*tile_size+16)-(field_size+16,i*tile_size+16),&h999999
draw string background,(16+(i-1)*tile_size+(tile_size/2-4),8), chr(64+i)
draw string background,(9,16+(i-1)*tile_size+(tile_size/2-4)), str(9-i)
next
for i = 1 to 8
for j as integer = 1 to 8
if (switch) then
paint background,(16+tile_size*i-1,16+tile_size*j-1), &hFFFFFF,&h999999
else
paint background,(16+tile_size*i-1,16+tile_size*j-1), &h000000,&h999999
end if
switch = not(switch)
next
switch = not(switch)
next
'Das ganze auf den Bildschirm bringen:
put (0,0), background , pset
'Enum, damit wir wissen welche Art von Figuren wir haben:
enum e_figur
bauer
turm
springer
laufer
dame
koenig
end enum
type t_figur
x as integer
y as integer
initial as boolean
fig as e_figur 'siehe oben. Hier ist vermerkt welche art von Figur
declare sub draw_it()
end type
sub t_figur.draw_it()
dim temp as string
'Je nach figurenart eine andere grafik. lässt sich eleganter lösen, aber das hier is
'nur quick'n'dirty hingerotzt... ;)
select case fig
case bauer
temp = "Bauer"
put (16 + (this.x-1) * tile_size, 16 + (this.y-1) * tile_size), bauer_gfx, trans
case turm
temp = "Turm"
put (16 + (this.x-1) * tile_size, 16 + (this.y-1)* tile_size), turm_gfx, trans
case springer
temp = "Springer"
case laufer
temp = "Laeufer"
case dame
temp = "Dame"
case koenig
temp = "Koenig"
end select
end sub
'wir brauchen eine LinkedList...
makelist(t_figur, figur)
'... und ein Array :)
dim brett(1 to 8, 1 to 8) as t_figur ptr
'(Geht auch ohne LL, aber mit ist es einfacher die Figuren zu bewegen und zu entfernen)
dim figuren as figur_list
dim tmp_figur as t_figur
dim key as string
dim as integer mx,my,btn
'Alle schwarzen Bauern aufstellen:
for i as integer = 1 to 8
tmp_figur.x = i
tmp_figur.y = 2
tmp_figur.fig = bauer
tmp_figur.draw_it()
figuren.append(tmp_figur)
brett(i,2) = figuren.getptr(figuren.count())
next
do
'Auf tastendruck oder mausklick warten:
do
sleep 1,1
getmouse mx,my, ,btn
key = inkey
loop until (key <> "") or (btn > 0)
if (btn > 0) then
locate 1,1
put (0,0), background, pset
for i = 1 to figuren.count()
figuren.getptr(i)->draw_it()
next
'Umrechnen der Mauskoordinaten in Koordinaten auf dem Spielbrett (A-H, 1-8):
my = int((my - 16) / tile_size) +1
mx = int((mx - 16) / tile_size) +1
print chr(64+mx)
print 9-my
'Wenn wir MX und MY nicht checken, passiert ein Unglück...
if (mx > 0 and mx < 8) and (my > 0 and my < 8) and (brett(mx,my) <> 0) then
if(brett(mx,my)->fig = bauer) then
print "Bauer"
end if
end if
'Warten bis der Mausbutton losgelassen wird:
while (btn > 0)
getmouse my,mx,,btn
sleep 1,1
wend
end if
loop until key = "q"
sleep