dame_2_chrisedit
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()