玩家模块的规范:
用一个长度为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')