纯粹练手哈,简单的实现了人机对战, 吃光为胜。电脑随机走棋= =
#_*_coding:utf-8_*_ ''' Created on 2012-3-27 简单版斗兽棋 @author: myter7 ''' from animal import Animal from board import Board import random import traceback from compiler.ast import For class Jungle: def __init__(self): #初始化本方动物 self.animals = [Animal("e", "象", ["t", "c"], 1, 1), Animal("t", "虎", ["c", "m"], 1, 2), Animal("c", "猫", ["m"], 2, 2), Animal("m", "鼠", ["e"], 2, 1)] #初始化对方动物 self.other_animals = [Animal("e", "象", ["t", "c"], 1, 5), Animal("t", "虎", ["c", "m"], 1, 6), Animal("c", "猫", ["m"], 2, 6), Animal("m", "鼠", ["e"], 2, 5)] #初始化棋盘 self.board = Board(4, 8) def get_animal(self, id, animals): for animal in animals: if animal.id == id: return animal def main(self): directions = ("u", "d", "l", "r") animal_ids = ("e", "t", "c", "m") while len(self.animals) > 0 and len(self.other_animals) > 0: #print "你还存活%s只动物" %len(self.animals) #print "对方还存活%s只动物" %len(self.other_animals) print "==================^ ^简单版斗兽棋, 吃光为胜^ ^==================" self.board.show(self.animals + self.other_animals) print "===========================================================" try: #选择动物 animal_id = raw_input("操作动物: e:象 t:虎 c:猫 m:鼠 请输入:") animal = self.get_animal(animal_id, self.animals) other_animal = self.get_animal(animal_ids[random.randint(0, 3)], self.other_animals) #other_animal = self.get_animal(animal_ids[3], self.other_animals) while animal == None: print "你选择的动物已经死亡或者不存在, 请重新选择!" animal_id = raw_input("操作动物: e:象 t:虎 c:猫 m:鼠 请输入:") while other_animal == None: other_animal = self.get_animal(animal_ids[random.randint(0, 3)], self.other_animals) #选择方向 direction = raw_input("移动到: u:上 d:下 l:左 r:右 请输入:") other_direction = directions[random.randint(0, len(directions) - 1)] #other_direction = directions[0] #print "你 向 【%s】 移动了【%s】" % (direction, a.name) #print "对方 向 【%s】 移动了【%s】" % (otherDirection, other.name) #移动动物 animal.move(direction, self.animals, self.other_animals, self.board) other_animal.move(other_direction, self.other_animals, self.animals, self.board) except Exception, e: print "请输入正确的数字!", e exstr = traceback.format_exc() print exstr if __name__ == "__main__": jungle = Jungle() jungle.main()
#_*_coding:utf-8_*_ ''' Created on 2012-3-27 @author: 11 ''' class Animal: def __init__(self, id, name, food, x, y): self.id = id self.name = name self.food = food self.x = x self.y = y #吃 def eat(self, other): if other.id in self.food: other.status = False print "%s吃掉了%s,味道还不错~" % (self.name, other.name) return True else: print "%s太硬了,不能吃哦~" % other.name return False #移动之后的处理 def handler(self, x, y, animals, other_animals, board): for a in other_animals: if x == a.x and y == a.y: if self.eat(a): self.x = x self.y = y other_animals.remove(a) else: return else: if(board.check_move(x, y, animals)): self.x = x self.y = y else: print "不能移动到该位置^ ^" #动物移动 def move(self, direction, animals, other_animals, board): flag = True x = self.x y = self.y if direction == 'u': y = y - 1 elif direction == 'd': y = y + 1 elif direction == 'l': x = x - 1 elif direction == 'r': x = x + 1 else: flag = False print "输入方向错误" if flag: self.handler(x, y, animals, other_animals, board)
# _*_ coding:utf-8_*_ ''' Created on 2012-3-27 @author: 11 ''' class Board: def __init__(self, w, h): #棋盘高 self.h = h #棋盘宽 self.w = w #棋盘坐标集合 p = [] for y in range(h): for x in range(w): p.append((x, y)); self.board = tuple(p) #检查当前坐标是不是动物 def check_is_animal(self, x, y, animals): for a in animals: if a.y == y and a.x == x: return a.name #检查棋子是否可以移动到目标位置 def check_move(self, x, y, animals): for a in animals: if x == a.x and y == a.y: return False if((x, y) not in self.board): return False return True #显示棋盘 def show(self, animals): for y in range(self.h): if y == self.h/2: print for x in range(self.w): aname = self.check_is_animal(x, y, animals); if aname: print " "*18, aname, #print aname, "(", x, y, ")", else: print " "*18, '口', #print '口', "(", x, y, ")", print '\n',