Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Schach 0.0.0.1 :)

Uploader:MitgliedMilkFreeze
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