qazat9 发表于 2018-7-22 01:31:33

python做的摇骰子吹牛小游戏

开发版本:python3.6.5

【注意一下,有一个附件需要下载然后把后缀.txt改成.pkl文件,与保存的.py文件放在同一文件夹下。】

我之前是自学的python基础太差,7月初才开始学习小甲鱼老师的课程。学到38课,来交个作业。
开发时间断断续续大概1周,有的算法和BUG真是搞到头秃。{:5_104:}

电脑超弱AI,主要像急着想看后面的课程就没深入研究,但是摇骰子这种拼运气的东西,还是会有输的时候哦。
由于没有编程经验,代码应该是非常不成熟,还请各位大佬多多包含,多多指教,有BUG的话欢迎反馈。

import pickle
import random as ra


class Bones:
    # 单个骰子roll点
    def roll(self):
      self.result = ra.randint(1,6)
      return self.result
      
class Rules:
    # 开牌分数计算
    def showdown(self,lis):
      global score
      self.newlis = lis[:]

      for each in lis:
            k = list(set(each))
            if len(k) == 1:
                special = 1
               
            if len(k) == 2 and each.count(k) + each.count(1) == 5 and call_one == 0:
                special = 1
               
            elif len(set(each)) == 5:
                special = 2

            else:
                special = 0
                pass   

            if special == 1:
                score += 10
                self.newlis.remove(each)
                  
            elif special == 2:               
                score+= 0
                self.newlis.remove(each)
               
            elif special == 0:
                score += each.count(guess)
                if call_one != 1:
                  score += each.count(1)                  
                else:
                  pass
      return score
class Banker(Bones):
    # 电脑roll点
    def play(self):
      for bone in range(5):
            B_result.append(self.roll())

    # 电脑开牌
    def guess(self):
      self.num = guess + 1
      self.points = guess
      guess = self.num
      guess = self.points
      print("电脑叫【%d】个【%d】\n"%(guess,guess))
      return guess

class Player(Bones):
    # 玩家roll点
    def play(self):
      for i in range(5):
            P_result.append(self.roll())
   
    #玩家开牌
    def guess(self):
      self.num = 0
      self.points = 0
      while self.points == 0:
            self.num = int(input("请输入骰子数(请输入一个非0的整数):"))
            self.points = int(input("请叫点数(请输入一个大于0且小于等于6的整数):"))      
            if self.points == 1:
                  call_one = 1
            if len(guess) == 0:
                  guess.extend()
                  break
            else:
                  if self.points > guess and self.num >= guess:
                        guess = self.num
                        guess = self.points
                        break
               
                  elif self.points == guess and self.num > guess:
                        guess = self.num
                        guess = self.points
                        break
               
                  elif self.points < guess and self.num > guess:
                        guess = self.num
                        guess = self.points
                        break
               
                  else:
                        self.num = 0
                        self.points =0
                        print("请从【%d+1】个【%d】或者【%d】个【%d+1】开始叫。"%(guess,guess,guess,guess))
                        continue
      
      print("玩家叫【%d】个【%d】"%(guess,guess))
      return guess

    #游戏帮助
    def game_help(self,h_list):
      for i in h_list:
            print(i)      

    #退出游戏
    def game_out(self):
      try:
            1 == 0

      except KeyboardInterrupt:
            pass
            
      
B_result = []
P_result = []
two_players =
score    = 0
guess   = []
start_play = 0
take_turns = 0
call_one = 0
special= 0
player_money = 100
CPU_money = 100

#调用PKL文件
pkl = open("game_rule.pkl","rb")
h_file = pickle.load(pkl)

#主程序
while player_money >= 0:
    if start_play is not 1:
      B = Banker()
      P = Player()
      Show = Rules()
      B_result.clear()
      P_result.clear()
      guess.clear()
      call_one = 0
      special = 0
      take_turns =0
      score = 0
      print("游戏开始,请摇骰子")
      take_turns = 1
      B.play()
      P.play()
      print("你的骰子点数为:%s" % P_result)
      while True:
            try:
                P_choice = int(input("输入【0】继续;输入【1】开牌;输入【5】查看帮助;输入【9】退出:"))
                if P_choice == 0:   
                  P.guess()
                  if guess > 6 or guess < 0:
                        print("最小1点,最大6点")
                        guess.clear()
                        continue
                  elif guess < 1:
                        print("不能少于1个")
                        guess.clear()
                        continue
                  if guess == 1:
                        call_one = 1
                  take_turns = 1
                elif P_choice == 1:
                  if guess:
                        All_result = B_result + P_result
                        Show.showdown(two_players)
                        take_turns = 2
                        print("结果是:\n 你的骰子为:%s\n 电脑的骰子为:%s\n "%(P_result,B_result))
                        print("骰子点数【%d】共有【%d】个\n"%(guess,score))
                        break
                  else:
                        print("点数不叫你就开牌,你484傻?")
                        continue
                elif P_choice == 5:
                  P.game_help(h_list = h_file)
                  continue

                elif P_choice == 9:
                  P.game_out()

                else:
                  print("输入错误!")
                  continue
            except (OSError,TypeError,ImportError):
                print("系统错误!")
                continue

            except:
                print("输入错误!")
                continue
            
            if guess in B_result:
                  B.guess()
                  take_turns = 2
            else:
                All_result = B_result + P_result
                Show.showdown(two_players)
                take_turns = 1
                print("电脑说:" + ra.choice(["我不信,开你!","你输定了!","你骗不了我..."]))
                print("结果是:\n 你的骰子为:%s\n 电脑的骰子为:%s\n "%(P_result,B_result))
                print("【%d】为【%d】个\n "%(guess,score))
                break
      
      if score >= guess:
            if take_turns == 1:
                player_money += 10
                CPU_money -= 10
                start_play = 0
                print("恭喜,玩家胜。")
                print("玩家金币:%d\n电脑金币:%d\n"%(player_money,CPU_money))
               
            elif take_turns == 2:
                player_money -= 10
                CPU_money += 10
                start_play = 0
                print("嗷欧~玩家输了")
                print("玩家金币:%d\n电脑金币:%d\n"%(player_money,CPU_money))

      else:
            if take_turns == 1:
                player_money -= 10
                CPU_money += 10
                start_play = 0
                print("嗷欧~玩家输了")
                print("玩家金币:%d\n电脑金币:%d\n"%(player_money,CPU_money))

            elif take_turns ==2:
                player_money += 10
                CPU_money -= 10
                start_play = 0
                print("恭喜,玩家胜。")
                print("玩家金币:%d\n电脑金币:%d\n"%(player_money,CPU_money))

      if player_money <= 0:
            print("玩家金币:%d\n电脑金币:%d\n"%(player_money,CPU_money))
            print("555555,没钱了,回家吃土吧……")
            break
      elif CPU_money <= 0:
            print("玩家金币:%d\n电脑金币:%d"%(player_money,CPU_money))
            print("恭喜玩家大获全胜!\n游戏结束。")
            break
      else:
            continue


qazat9 发表于 2018-7-22 13:43:54

之前不知道可以上传压缩文件,不好意思。
补上补上
页: [1]
查看完整版本: python做的摇骰子吹牛小游戏