《升级》扑克牌游戏——Python实现

玩家模块的规范:

用一个长度为2的字符串表示一张牌:(D,C,H,S) + (A,2,3,4,5,6,7,8,9,0,J,Q,K)   用"jk"、"JK"分别表示小王、大王
游戏顺序是逆时针方向
角色用一个字符串表示,("banker","banker_opposite","banker_left","banker_right")分别表示庄家、庄家的对家、庄家的左边、庄家的右边
不考虑甩牌
使用python进行设计

player模块设计:

设计函数:
def add_card_and_is_snatch(current_card):
表示玩家摸到一张牌curernt_card,并选择是否抢庄。
current_card表示一张牌(长度为2的字符串)
如果抢庄,返回相应的牌的字符串,否则返回''

设计函数:
def add_left_cards(left_cards):
只需要庄家才会用到,表示底牌是left_cards,left_cards是一个长度为2的字符串的list
需要返回玩家准备埋到底牌的牌,返回值也是一个长度为2的字符串的list

设计函数:
def finish_one_round(current_turn_out_cards):
表示这一轮出牌结束,玩家被告知这一轮的出牌信息,
current_turn_out_cards表示一个三元组(order,role,card)的list,
每一个三元组表示这一轮你出牌之前的某一个人出的牌的信息,
order是一个整数,表示出牌顺序(1,2,3,4)
role是一个字符串,表示角色("banker","banker_opposite","banker_left","banker_right")
card是一张牌

设计函数:
def set_main_value(main_value):
玩家被告知主面值是什么,main_value是一个字符(A,2,3,4,5,6,7,8,9,0,J,Q,K)表示主面值

设计函数:
def set_main_color(main_color):
玩家被告知主花色是什么,main_color是一个字符(D,C,H,S)表示主花色

设计函数:
def player_init():
表示现在开始一局新的游戏,并初始化相关变量

设计函数:
def set_role(role):
玩家被告知自己的角色是什么,role是一个字符串("banker","banker_opposite","banker_left","banker_right")

设计函数:
def play_out_cards(turn, current_turn_out_cards):
turn表示当前是第几轮出牌,current_turn_out_cards表示一个三元组(order,role,card)的list,
每一个三元组表示这一轮你出牌之前的某一个人出的牌的信息,
order是一个整数,表示出牌顺序(1,2,3,4)
role是一个字符串,表示角色("banker","banker_opposite","banker_left","banker_right")
card是一张牌
函数需要返回决定出的一张牌

设计函数:
def show_cards():
需要返回当前玩家的手牌(长度为2的字符串的list)

UI说明:

import UI

在游戏初始化模块添加代码:

# Initialize pygame

pygame.init()

setting = UI.Setting()



SCREEN_WIDTH, SCREEN_HEIGHT = setting.SCREEN_WIDTH, setting.SCREEN_HEIGHT

x, y = 150, 60

os.environ['SDL_VIDEO_WINDOW_POS'] = "%d,%d" % (x,y)

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("升级")



       background = UI.Background(screen, setting)

使用接口说明:

initial(self):

每轮游戏初始化函数,重置卡组等功能;

add_card(self, card, turn):

发牌阶段,turn为目的发牌玩家的位置0-3,card为所发牌值;

add_cards_over(self, inputs, outputs, main_color, master):

发牌阶段结束后调用此函数;input为发给庄家的6张底牌,output为庄家压底的6张牌;mian_color为此局的主色,master是庄家玩家的位置0-3;

push_cards(self, cards, turn):

打牌阶段,函数意义是turn玩家打出cards,cards为card列表,即所有打出的牌值;

turn_over(self):

一轮牌结束阶段;清空四位玩家打出的所有牌;

update_point (self, point, level1, level2):

一轮牌结束阶段,更新当前得分和级数;point为当前得分,level1为东西位置玩家当前的级数,level2为南北玩家当前的级数

传递变量说明:

card:

(D,C,H,S) + (A,2,3,4,5,6,7,8,9,0,J,Q,K)   用"jk"、"JK"分别表示小王、大王

黑桃-spade 红桃-heart 方快-diamond 草花-club

黑桃3 : card = ‘s3’

turn:

整数0-3

(0, 1, 2, 3) 等价于 ('East', 'North', 'West', 'South')

 

参考demo: judge为裁判模块,myPlayer为AI玩家,运行judge.py

运行截图:

 

附件:上传至CSDN下载,传送门:https://download.csdn.net/download/weixin_37922777/10839701

猜你喜欢

转载自blog.csdn.net/weixin_37922777/article/details/84936314