Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

dame_2_chrisedit

Python Source icon dame2_chrisedit.py — Python Source, 8 KB (9108 bytes)

Dateiinhalt

from visual import *
#import time
#import math
from threading import Thread
import random

class information:
    def __init__(self,spiel):
        self.displayscore_black = spiel.score_black
        self.displayscore_white = spiel.score_white
        self.turn = spiel.turn
        
        self.label_black = label(pos = (9,spiel.stapel_black + 1,0), text = "white: " + str(spiel.score_white), height = 40)
        self.label_white = label(pos = (-2,spiel.stapel_white + 1,-7), text = "black: " + str(spiel.score_black), height = 40)
       # self.label_turn

    def update_display(self,spiel):
        self.label_black.pos = (9,spiel.stapel_black + 1,0)
        self.label_black.text = "white: " + str(spiel.score_white)

        self.label_white.pos = (-2,spiel.stapel_white + 1,-7)
        self.label_white.text = "black: " + str(spiel.score_black)
        
class Spielbrettstein:
    def __init__ (self,farbe = 1,position = (0,0,0),isSet = None):
        self.stein = box(pos = position,height = 0.2,length = 1,width = 1)
        self.farbe = farbe
        if farbe == 1:
            self.stein.color = color.black
        else:
            self.stein.color = color.white
        self.pObject = isSet

            

class Spielbrett:
    def __init__(self):
        self.brett = []
        for i in range(0,64):
            self.brett.append(Spielbrettstein(farbe = (i+(i/8))%2,position = (i%8,0,-(i/8))))
            #time.sleep(1)

    def FeldSetzen(self,x,y,Object):
        self.brett[int(x+abs(y)*8)].pObject = Object
        #print(brett[x+abs(y)*8]

class Spielstein(frame):
    def __init__(self,farbe = 1,position = (0,0,0)):
        frame.__init__(self)
        self.stein = cylinder(frame = self,pos = position,radius = 0.5,length = 0.4,axis = (0,0.4,0),material = materials.wood)
        self.farbe = farbe
        self.lastPos = position
        if farbe == 1:
            self.stein.color = (1,1,1)
        else:
            self.stein.color = (0.35,0.35,0.35)
            
        self.istDame = False
        
    def highlight_white(self):
        if self.farbe == 1:
            self.stein.color = (1,1,1)
        else:
            self.stein.color = (0.1,0.1,0.1)
            
    def highlight_black(self):
        if self.farbe == 1:
            self.stein.color = (0.7,0.7,0.7)
        else:
            self.stein.color = (0.35,0.35,0.35)
            
    def checkifValid(self, spiel):
        if(spiel.turn == self.farbe):
            newpos = (round(self.stein.pos[0],0),0,round(self.stein.pos[2],0))
            if newpos[0]<0 or newpos[0] > 7 or newpos[2]>0 or newpos[2] < -7 or ((newpos[0]+ newpos[2])%2 == 0):
                newpos = self.lastPos
            else:
                if not self.istDame:
                    if self.farbe == 1:
                        if self.lastPos[2] <= newpos[2]:
                            newpos = self.lastPos
                    else:
                        if self.lastPos[2]>=newpos[2]:
                            newpos = self.lastPos

                            
                if abs(newpos[0] - self.lastPos[0]) > 2 or abs(newpos[2] - self.lastPos[2]) > 2:
                    newpos = self.lastPos
                elif (abs(newpos[0] - self.lastPos[0]) == 2 and abs(newpos[2] - self.lastPos[2]) == 0) or (abs(newpos[2] - self.lastPos[2]) == 2 and abs(newpos[0] - self.lastPos[0]) == 0):
                    newpos = self.lastPos
                elif abs(newpos[0] - self.lastPos[0]) == 2 or abs(newpos[2] - self.lastPos[2]) == 2:
                    if spiel.brett.brett[int(newpos[0]+abs(newpos[2])*8)].pObject:
                        newpos = self.lastPos
                    elif spiel.brett.brett[int((newpos[0]+(self.lastPos[0] - newpos[0])/2)+abs((newpos[2]+(self.lastPos[2] - newpos[2])/2)*8))].pObject:
                        steinImWeg = spiel.brett.brett[int((newpos[0]+(self.lastPos[0] - newpos[0])/2)+abs((newpos[2]+(self.lastPos[2] - newpos[2])/2)*8))].pObject
                        if steinImWeg.farbe == self.farbe:
                            newpos = self.lastPos
                        else:
                            steinImWeg.Wegnehmen(spiel)
                            spiel.brett.FeldSetzen((newpos[0]+(self.lastPos[0] - newpos[0])/2),(newpos[2]+(self.lastPos[2] - newpos[2])/2), None)
                            spiel.brett.brett[int(newpos[0]+abs(newpos[2])*8)].pObject = self
                            spiel.brett.FeldSetzen(self.lastPos[0], self.lastPos[2], None)
                            spiel.next_turn(False)
                            #eventuell Zug weitergeben
                else:
                    #print(newpos)
                    if spiel.brett.brett[int(newpos[0]+abs(newpos[2])*8)].pObject:
                        newpos = self.lastPos
                    else:
                        spiel.brett.brett[int(newpos[0]+abs(newpos[2])*8)].pObject = self
                        spiel.brett.FeldSetzen(self.lastPos[0], self.lastPos[2], None)


            if(newpos[2] == -7 and self.farbe == 1):
                self.ZurDameMachen()
            elif(newpos[2] == 0 and self.farbe == 0):
                self.ZurDameMachen()

            if(self.lastPos != newpos):
                spiel.next_turn(True)
            
        else:
            newpos = self.lastPos
            print "not your Turn!"
            
        self.stein.pos = newpos
        self.lastPos = newpos


    def ZurDameMachen(self):
        if self.istDame == False:
            self.stein.length = self.stein.length * 2
            self.istDame = True

    def Wegnehmen(self,spiel):
        #self.stein.visible = False
        if(self.farbe == 0):
            self.stein.pos = (9+(random.random()-0.5)/8,spiel.stapel_black,0+(random.random()-0.5)/8)
            spiel.add_to_white_score()
            if(self.istDame):
                spiel.add_to_black_stapel()
            spiel.add_to_black_stapel()
        else:
            self.stein.pos = (-2+(random.random()-0.5)/8,spiel.stapel_white,-7+(random.random()-0.5)/8)
            spiel.add_to_black_score()
            if(self.istDame):
                spiel.add_to_white_stapel()
            spiel.add_to_white_stapel()
        
            
class Spiel:
    def __init__(self):
        scene.background = (0.2,0.5,0.7)
        scene.center = (3.5,0,-3.5)
        #scene.stereo = "active"
        self.brett = Spielbrett()
        self.steine = []
        self.turn = 1
        self.score_black = 0
        self.score_white = 0

        self.stapel_black = 0
        self.stapel_white = 0

        self.informationlabels = information(self)
        
        for i in range(12):
            temp = Spielstein(farbe = 1,position = (((i*2)+i/4+1)%8,0,-(i/4)))
            self.steine.append(temp)
            self.brett.FeldSetzen(((i*2)+i/4+1)%8,-(i/4),temp)
            #time.sleep(1) #watch it!!!!!

        for i in range(12):
            temp = Spielstein(farbe = 0,position = (((i*2)+i/4)%8,0,(i/4)-7))
            self.steine.append(temp)
            self.brett.FeldSetzen(((i*2)+i/4)%8,(i/4)-7,temp)
            #time.sleep(1)

    def IstStein(self,Object):
        for i in self.steine:
           if Object == i.stein:
               return i
        return None
            
    def next_turn(self,do_print):
        if(self.turn == 1):
            self.turn = 0
        elif(self.turn == 0):
            self.turn = 1

        if(do_print == True):
            if(self.turn == 1):
                print "white"
                for x in self.steine:
                    x.highlight_white()
            else:
                print "black"
                for x in self.steine:
                    x.highlight_black()
    def add_to_white_score(self) :
        self.score_white += 1
        self.informationlabels.update_display(self)
        
    def add_to_black_score(self) :
        self.score_black += 1
        self.informationlabels.update_display(self)
        
    def add_to_white_stapel(self) :
        self.stapel_white += 0.4
        
    def add_to_black_stapel(self) :
        self.stapel_black += 0.4

  
        
        
'''class Spiellogik(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.spiel = None

    def run(self):
self.spiel = Spiel()'''
spiel = Spiel() 
pick = None
while True:
    if scene.mouse.events:
        currentevent = scene.mouse.getevent()
        if currentevent.drag and spiel.IstStein(currentevent.pick):
            drag_pos = currentevent.pickpos
            pick = currentevent.pick
        elif currentevent.drop:
            if spiel.IstStein(pick):
                spiel.IstStein(pick).checkifValid(spiel)
            pick = None

    if pick:
        new_pos = scene.mouse.project(normal=(0,1,0))
        if new_pos != drag_pos:
            pick.pos += new_pos - (drag_pos[0],0,drag_pos[2])
            drag_pos = new_pos

    if(spiel.score_black >= 12):
        print "black wins!"
        break
    elif(spiel.score_white >= 12):
        print "white wins!"
        break
        
    sleep(0.02)            




#x = Spiellogik()
#x.start()

    

Funktionsleiste