基于python的五子棋游戏的设计和实现,Python五子棋游戏大作业

  基于python的五子棋游戏的设计和实现,Python五子棋游戏大作业

  本文主要详细介绍了简单五子棋游戏的Python实现。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  本文分享用Python实现五子棋游戏的具体代码,供大家参考。具体如下。

  类棋盘():

  棋盘类

  def __init__(self,col=0,row=0,piece_type= - ):

  self.col=col

  self.row=row

  self.piece_type=piece_type

  self.labelx=range(self.col)

  self.labely=range(self.row)

  def棋盘(自身):

  棋盘初始化数据(棋子状态)

  棋盘1=[]

  为y in self.labely:

  heading_list=[]

  checkerboard l . append(heading _ list)

  对于self.labelx:中的x

  heading_list.append(自身. piece_type)

  返回棋盘l

  def chess_show(自身,棋盘1):

  显示棋子的状态

  打印( \0\0\0 ,end= )

  对于self.labelx:中的x_title

  print(str(x_title))。zfill(2),end= )

  对于范围内的y _ title(len(checkerboard l)):

  print(\n ,str(y_title)。zfill(2),end= )

  对于棋盘中的实例l[y_title]:

  打印(实例,结束= )

  类用户():

  玩家类别

  def __init__(自身,id,名称,piece_type):

  构造函数

  Id:玩家id标识

  姓名:玩家姓名

  Piece_type:片段的状态

  self.id=id

  self.name=name

  self.piece_type=piece_type

  定义播放(自身,x,y,池,数据):

   play():玩家下棋子。

  x:下方棋子的x坐标。

  y:下方棋子的y坐标。

  Pool:状态设置棋子

  数据:棋盘上棋子的状态数据。

  如果数据[y][x]不在池:中

  data[y][x]=self.piece_type

  返回数据,真

  else:

  打印( \ n位置错误,已经有棋子,请重新输入:)

  返回数据,假

  def __col_list(self,x,y,col,row,data):

  获取下一个棋子的X轴上所有棋子的状态。

  x:下方棋子的x坐标。

  y:下方棋子的y坐标。

  Col:棋盘的最大水平坐标

  Row:棋盘的最大垂直坐标。

  数据:棋盘中棋子的状态数据。

  # slist=[]

  slist=data[y]

  打印(slist, __col_list )

  返回列表

  def __row_list(self,x,y,col,row,data):

  获取下一个棋子的Y轴上所有棋子的状态。

  x:下方棋子的x坐标。

  y:下方棋子的y坐标。

  Col:棋盘的最大水平坐标

        row:棋盘的最大纵向坐标

                      data:棋盘中棋子的状态数据

          slist = []

          for i in data:

              slist.append(i[x])

          print(slist, __row_list)

          return slist

      def __left_cut_list(self, x, y, col,row, data):

          获取下棋子的左斜角所有棋子的状态

                      x:下棋子的x坐标

                      y:下棋子的y坐标

                      col:棋盘的最大横向坐标

                      row:棋盘的最大纵向坐标

                      data:棋盘中棋子的状态数据

          slist = []

          if 0 <= x+y and  row > x+y:

              x_val_init = x+y

              y_val_init = 0

              while x_val_init >= 0 and y_val_init <= row-1:

                  val = data[y_val_init][x_val_init]

                  slist.append(val)

                  x_val_init -= 1

                  y_val_init += 1

          else:

              x_val_init = col-1

              y_val_init = y

              while x_val_init > 0 and y_val_init <= row-1:

                  val = data[y_val_init][x_val_init]

                  slist.append(val)

                  x_val_init -= 1

                  y_val_init += 1

          print(slist, __left_cut_list)

          return slist

      def __right_cut_list(self, x, y, col,row, data):

          获取下棋子的右斜角所有棋子的状态

              x:下棋子的x坐标

              y:下棋子的y坐标

              col:棋盘的最大横向坐标

              row:棋盘的最大纵向坐标

              data:棋盘中棋子的状态数据

          slist = []

          if 0 <= x-y :

              x_val_init = x-y

              y_val_init = 0

              while x_val_init <= col-1 and y_val_init <= row-1:

                  val = data[y_val_init][x_val_init]

                  slist.append(val)

                  x_val_init += 1

                  y_val_init += 1

          else:

              x_val_init = 0

              y_val_init = y-x

              while x_val_init <= col-1 and y_val_init <= row-1:

                  val = data[y_val_init][x_val_init]

                  slist.append(val)

                  x_val_init += 1

                  y_val_init += 1

          print(slist, __right_cut_list)

          return slist

      def fif_diff(slef,list5):

          判断连续五个棋子状态都一样

          # list5:5个元素的列表

          piece_type = slef.piece_type

          for i in range(len(list5)):

              if list5[i] != piece_type:

                  return False

          return True

      def rule(self,x, y, col,row, data):

          规则:连续5个棋子状态都一样时,返回True

          x:下棋子的x坐标

          y:下棋子的y坐标

          col:棋盘的最大横向坐标

          row:棋盘的最大纵向坐标

          data:棋盘中棋子的状态数据

          status = False

          rule_list = [self.__col_list,self.__row_list,self.__left_cut_list,self.__right_cut_list]

          for i in range(len(rule_list)):

              get = rule_list[i]

              slist = get(x, y, col,row, data)

              if len(slist) >= 5:

                  start = 0

                  end = 5

                  while end < len(slist) + 4:

                      fif_ele_list = slist[start:end]

                      if self.fif_diff(fif_ele_list) :

                          print(%s赢了 %self.name,11111111111111)

                          status = True

                          break

                      else:

                          start += 1

                          end += 1

          return status

  def inputbox(obj, pool, checkerboardl_init):

      输入横向纵向坐标

      print(\n*************************************************)

      x = int(input(%s请输入横坐标:%obj.name).strip())

      if not 0 <= x < 15:

          x = int(input(%s请输入横坐标:%obj.name).strip())

      y = int(input(%s请输入纵坐标:%obj.name).strip())

      if not 0 <= y < 15:

          y = int(input(%s请输入纵坐标:%obj.name).strip())

      checkerboardl,static = obj.play(x, y, pool, checkerboardl_init)

      if static:

          s = obj.rule(x, y, 15, 15, checkerboardl)

          chess.chess_show(checkerboardl)

          if s:

              return True

      else:

          inputbox(obj, pool, checkerboardl_init)

  pool = []

  checkerboardl=[]

  static =

  if __name__ == __main__:

      ST = True

      chess = CheckerBoard(15,15)

      checkerboardl_init = chess.chessboard()

      chess.chess_show(checkerboardl_init)

      s1 = User(1,jack,@@)

      pool.append(s1.piece_type)

      s2 = User(2, chen, ##)

      pool.append(s2.piece_type)

      z =1

      while  ST:

          if z == 1:

              a = inputbox(s1, pool, checkerboardl_init)

              if a :

                  break

              z = 2

              continue

          if z == 2:

              b = inputbox(s2, pool, checkerboardl_init)

              if b :

                  break

              z = 1

  简化图:

  

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: