Python - 猜灯谜 - 外星人入侵小游戏 - 小游戏 - 小乌龟 - 画五角星 - 画太阳花 - 画小蟒蛇 - 画皮卡丘 - 画小猪佩奇 - 斗地主
依赖
pip install pygame
还需要本地同级目录有个simfang.ttf文件搭配,也可以有个MP3音乐文件搭配。
百度云链接: 提取码: ptzk
代码示例
import os
import sys
import pygame
import random
data = [
{
'quesion': '黑嘴雀,落田渦,食水少,講話多(打一文具)',
'options': ['鋼筆', '毛筆', '鉛筆', '墨水'],
'answer': 1
},
{
'quesion': '發言音太輕,聽眾有意見(打一成語)',
'options': ['人微言輕', '眾口難調', '不盡人意', '低聲下氣'],
'answer': 3
},
{
'quesion': '閉口不言只管笑(打一字)',
'options': ['答', '合', '哈', '吞'],
'answer': 2
},
{
'quesion': '張清在前,秦明斷後(打二字中國城市)',
'options': ['洛陽', '青島', '長春', '南京'],
'answer': 2
},
{
'quesion': '冤情由來(打二字古代人名)',
'options': ['竇娥', '魏延', '岳飛', '屈原'],
'answer': 3
},
{
'quesion': '外青內白胖娃娃,酒席上面愛雕花(打一蔬菜)',
'options': ['蘿蔔', '冬瓜', '黃瓜', '苦瓜'],
'answer': 1
},
{
'quesion': '十字對十字,太陽對月亮(猜一個字)',
'options': ['明', '早', '朝', '脾'],
'answer': 2
},
{
'quesion': '中心要點 (打一字)',
'options': ['忠', '小', '卜', '重'],
'answer': 2
},
{
'quesion': '日落香殘,洗卻凡心一點(猜一字)',
'options': ['禿', '旻', '頹', '嘰'],
'answer': 0
},
{
'quesion': '既有頭,又有尾,中間生四張嘴(猜一字)',
'options': ['田', '申', '由', '晶'],
'answer': 1
},
{
'quesion': '二間屋仔窄一窄,裡面住著十個人客(打一生活物冠量)',
'options': ['手套', '文具盒', '一對鞋', '化妝包'],
'answer': 2
},
{
'quesion': '一點一畫長,二畫口四方,五月荔枝熟,媽(張)開口來裝(打一字)',
'options': ['唔', '吾', '語', '焐'],
'answer': 2
},
{
'quesion': '麥兜自己沖涼(打一作家)',
'options': ['麥佳碧', '朱熹', '李清照', '朱自清'],
'answer': 3
},
{
'quesion': '一個「不」出頭,二個「不」出頭,三個「不」出頭,唔系唔出頭,實系「不」出頭(打一字)',
'options': ['森', '丕', '林', '歪'],
'answer': 0
},
{
'quesion': '濕濕瀝瀝,連毛塞入;唔怕腰骨痛,只要子孫密(猜一勞作行為)',
'options': ['鑿井', '耕田', '插秧', '撈魚'],
'answer': 2
},
{
'quesion': '闔盅合(蓋)闔盅,裡而有個豆皮翁。(打一植物果實)',
'options': ['核桃', '花生', '荷蘭豆', '榴蓮'],
'answer': 0
},
{
'quesion': '艇仔合(蓋)艇仔,裡面有兩個孖仔。(打一農作物)',
'options': ['荷蘭豆', '黃豆', '花生', '菱角'],
'answer': 2
},
{
'quesion': '主人微笑(打一地名)',
'options': ['嘉興', '安徽', '東京', '東莞'],
'answer': 3
},
{
'quesion': '鍵盤入面邊個掣最靚仔?',
'options': ['8', 'F8', 'F12', 'F4'],
'answer': 3
},
{
'quesion': '咩豬系冇腳?',
'options': ['蜘蛛', '存錢豬', '珍珠', '羅志祥'],
'answer': 2
},
{
'quesion': '爺爺的兒子(打一種食物)',
'options': ['包子', '椰子', '車仔面', '芭樂'],
'answer': 1
},
{
'quesion': '一間屋,三個門,裡面只住半個人。(猜一用品)',
'options': ['T-恤', '手套', '褲子', '襪子'],
'answer': 2
},
{
'quesion': '拱豬入門(打一字)',
'options': ['間', '閡', '闔', '閉'],
'answer': 1
},
{
'quesion': '皇帝新衣。(打一字)',
'options': ['無', '假', '襲', '謊'],
'answer': 2
},
{
'quesion': '香港的肥仔多數姓什乜?',
'options': ['肥', '胖', '大', '死'],
'answer': 3
}
]
'''按钮类'''
class Button(pygame.sprite.Sprite):
def __init__(self, **kwargs):
pygame.sprite.Sprite.__init__(self)
if kwargs.get('font') is None:
self.font = pygame.font.Font(kwargs.get('font_path'), kwargs.get('font_size'))
else:
self.font = kwargs.get('font')
self.black = (0, 0, 0)
self.white = (255, 255, 255)
self.red = (255, 0, 0)
self.green = (0, 255, 0)
self.blue = (0, 0, 255)
self.cyan = (0, 255, 255)
self.text = kwargs.get('text')
self.image = self.font.render(self.text, True, self.white)
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = kwargs.get('position')
'''画到屏幕上'''
def draw(self, screen):
screen.blit(self.image, self.rect)
'''更新'''
def update(self):
mouse_pos = pygame.mouse.get_pos()
if self.rect.collidepoint(mouse_pos):
self.image = self.font.render(self.text, True, self.cyan)
else:
self.image = self.font.render(self.text, True, self.white)
'''定义一些常量'''
DeepSkyBlue = (0, 191, 255)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
MediumOrchid = (186, 85, 211)
riddles_list = data
random.shuffle(riddles_list)
font_path = os.path.join(os.getcwd(), 'simfang.ttf')
'''开始界面'''
class startInterface():
def __init__(self, screen, **kwargs):
self.text1 = '猜 灯 谜'
self.text2 = '开始游戏'
self.text3 = '退出游戏'
self.screen = screen
def start(self):
button_groups = pygame.sprite.Group()
button_start = Button(font_path=font_path, font_size=24, text=self.text2, position=(236, 300))
button_quit = Button(font_path=font_path, font_size=24, text=self.text3, position=(464, 300))
button_groups.add(button_start)
button_groups.add(button_quit)
font = pygame.font.Font(font_path, 48)
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
mouse_pos = pygame.mouse.get_pos()
if button_start.rect.collidepoint(mouse_pos):
return
elif button_quit.rect.collidepoint(mouse_pos):
pygame.quit()
sys.exit()
self.screen.fill((0, 0, 0))
title = font.render(self.text1, True, DeepSkyBlue)
self.screen.blit(title, (302, 150))
button_groups.update()
button_groups.draw(self.screen)
pygame.display.update()
clock.tick(60)
'''结束界面'''
class endInterface():
def __init__(self, screen, num_correct, num_total, **kwargs):
self.text1 = '恭喜你猜完了所有灯谜'
self.text2 = '答对的灯谜数量: %s' % num_correct
self.text3 = '灯谜总数量: %s' % num_total
self.text4 = '正确率: %.2f%%' % (num_correct * 100 / num_total)
self.screen = screen
def start(self):
button_groups = pygame.sprite.Group()
button_restart = Button(font_path=font_path, font_size=24, text='重新开始', position=(236, 400))
button_quit = Button(font_path=font_path, font_size=24, text='退出游戏', position=(464, 400))
button_groups.add(button_restart)
button_groups.add(button_quit)
font_big = pygame.font.Font(font_path, 32)
font = pygame.font.Font(font_path, 24)
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
mouse_pos = pygame.mouse.get_pos()
if button_restart.rect.collidepoint(mouse_pos):
startGuess()
elif button_quit.rect.collidepoint(mouse_pos):
pygame.quit()
sys.exit()
self.screen.fill((0, 0, 0))
text1_render = font_big.render(self.text1, True, DeepSkyBlue)
text2_render = font.render(self.text2, True, DeepSkyBlue)
text3_render = font.render(self.text3, True, DeepSkyBlue)
text4_render = font.render(self.text4, True, DeepSkyBlue)
self.screen.blit(text1_render, (250, 100))
self.screen.blit(text2_render, (250, 200))
self.screen.blit(text3_render, (250, 240))
self.screen.blit(text4_render, (250, 280))
button_groups.update()
button_groups.draw(self.screen)
pygame.display.update()
clock.tick(60)
'''获得一个灯谜'''
def getRiddle(riddle_idx):
if riddle_idx == len(riddles_list):
return None
return riddles_list[riddle_idx]
'''开始猜灯谜'''
def startGuess():
pygame.init()
pygame.font.init()
pygame.mixer.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('猜灯谜-微信公众号: Charles的皮卡丘')
# pygame.mixer.music.load((os.path.join(os.getcwd(), 'bg.mp3')))
# pygame.mixer.music.set_volume(0.4)
# pygame.mixer.music.play(-1)
clock = pygame.time.Clock()
startInterface(screen).start()
riddle_idx = 0
one_riddle = getRiddle(riddle_idx)
num_correct = 0
font = pygame.font.Font(font_path, 24)
font_big = pygame.font.Font(font_path, 32)
flag = False
time_count = 0
while True:
button_choice1 = Button(font=font, text='A. ' + one_riddle.get('options')[0], position=(100, 250))
button_choice2 = Button(font=font, text='B. ' + one_riddle.get('options')[1], position=(100, 290))
button_choice3 = Button(font=font, text='C. ' + one_riddle.get('options')[2], position=(100, 330))
button_choice4 = Button(font=font, text='D. ' + one_riddle.get('options')[3], position=(100, 370))
button_groups = pygame.sprite.Group()
button_groups.add(button_choice1, button_choice2, button_choice3, button_choice4)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
if not flag:
mouse_pos = pygame.mouse.get_pos()
answer = one_riddle.get('answer')
if button_choice1.rect.collidepoint(mouse_pos):
flag = True
if answer == 0:
text = '恭喜你, 答对了本题'
num_correct += 1
else:
text = '很遗憾, 答错了本题'
elif button_choice2.rect.collidepoint(mouse_pos):
flag = True
if answer == 1:
text = '恭喜你, 答对了本题'
num_correct += 1
else:
text = '很遗憾, 答错了本题'
elif button_choice3.rect.collidepoint(mouse_pos):
flag = True
if answer == 2:
text = '恭喜你, 答对了本题'
num_correct += 1
else:
text = '很遗憾, 答错了本题'
elif button_choice4.rect.collidepoint(mouse_pos):
flag = True
if answer == 3:
text = '恭喜你, 答对了本题'
num_correct += 1
else:
text = '很遗憾, 答错了本题'
screen.fill((0, 0, 0))
if not flag:
riddle_content1 = '灯谜: '
riddle_content2_1 = one_riddle.get('quesion')[:len(one_riddle.get('quesion')) // 2]
riddle_content2_2 = one_riddle.get('quesion')[len(one_riddle.get('quesion')) // 2:]
riddle_content3 = '选项: '
riddle_content1_render = font.render(riddle_content1, True, MediumOrchid)
riddle_content2_1_render = font.render(riddle_content2_1, True, MediumOrchid)
riddle_content2_2_render = font.render(riddle_content2_2, True, MediumOrchid)
riddle_content3_render = font.render(riddle_content3, True, MediumOrchid)
screen.blit(riddle_content1_render, (60, 80))
screen.blit(riddle_content2_1_render, (60, 120))
screen.blit(riddle_content2_2_render, (60, 150))
screen.blit(riddle_content3_render, (60, 210))
button_groups.update()
button_groups.draw(screen)
else:
time_count += 1
if time_count > 60:
flag = False
time_count = 0
riddle_idx += 1
one_riddle = getRiddle(riddle_idx)
if one_riddle is None:
endInterface(screen, num_correct, len(riddles_list)).start()
else:
text_render = font_big.render(text, True, RED)
screen.blit(text_render, (160, 250))
pygame.draw.line(screen, WHITE, (600, 0), (600, 600), 5)
score_text = '答对灯谜数: %s' % num_correct
score_text_render = font.render(score_text, True, WHITE)
screen.blit(score_text_render, (620, 100))
pygame.display.update()
clock.tick(60)
if __name__ == '__main__':
startGuess()
参考:Charles的皮卡丘
目录
import os
import sys
import random
import pygame
'''显示字'''
def showText(screen, text, color, font, x, y):
text = font.render(text, True, color)
screen.blit(text, (x, y))
'''显示与生命值等数量的飞船(右上角)'''
def showLife(screen, num_life, color):
cell = [2, 2]
num_cols = 15
filled_cells = [7,21,22,23,36,37,38,46,47,48,49,50,51,52,53,54,55,56,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119]
for i in range(num_life):
position = [750-35*i, 8]
for i in range(0, len(filled_cells)):
y = filled_cells[i] // num_cols
x = filled_cells[i] % num_cols
rect = [x * cell[0] + position[0], y * cell[1] + position[1], cell[0], cell[1]]
pygame.draw.rect(screen, color, rect)
'''结束界面'''
def endInterface(screen, color, is_win):
screen.fill(color)
clock = pygame.time.Clock()
if is_win:
text = 'VICTORY'
else:
text = 'FAILURE'
font = pygame.font.SysFont('arial', 30)
text_render = font.render(text, 1, (255, 255, 255))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if (event.type == pygame.KEYDOWN) or (event.type == pygame.MOUSEBUTTONDOWN):
return
screen.blit(text_render, (350, 300))
clock.tick(60)
pygame.display.update()
'''我方飞船类'''
class aircraftSprite(pygame.sprite.Sprite):
def __init__(self, color, bullet_color, **kwargs):
pygame.sprite.Sprite.__init__(self)
# 生命值
self.num_life = 3
self.max_num_life = 5
# 最小单元
self.cell = [3, 3]
self.num_cols = 15
self.num_rows = 8
# 用于碰撞检测
self.rect = pygame.Rect(0, 550, self.cell[0]*self.num_cols, self.cell[0]*self.num_rows)
# 填充颜色区域
self.filled_cells = [7,21,22,23,36,37,38,46,47,48,49,50,51,52,53,54,55,56,57,58,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119]
# 飞船颜色
self.color = color
# 飞船子弹颜色
self.bullet_color = bullet_color
# 子弹是否在冷却中
self.is_cooling = False
self.init_count = 35
self.cooling_count = self.init_count
# 得分
self.score = 0
# 避免重复增加生命值
self.old_score = -1
self.resetBoom()
'''射击'''
def shot(self):
if self.is_cooling:
return None
self.is_cooling = True
self.cooling_count = self.init_count
return myBulletSprite(self.rect.x + self.rect.width // 2, self.rect.y, self.bullet_color)
'''在屏幕上画出来'''
def draw(self, screen):
for i in range(0, len(self.filled_cells)):
y = self.filled_cells[i] // self.num_cols
x = self.filled_cells[i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
'''更新飞船位置等信息'''
def update(self, WIDTH):
# 位置信息
x = pygame.mouse.get_pos()[0] - (self.rect.width // 2)
if x < 0:
x = pygame.mouse.get_pos()[0]
elif x > WIDTH - self.rect.width:
x = WIDTH - self.rect.width
self.rect.x = x
# 子弹信息
if self.is_cooling:
self.cooling_count -= 1
if self.cooling_count == 0:
self.is_cooling = False
'''被击中后爆炸'''
def boom(self, screen):
self.boomed_rect.x = self.rect.x
self.boomed_rect.y = self.rect.y
self.boomed_count += 1
if self.boomed_count % 1 == 0:
self.boomed_frame += 1
for i in range(0, len(self.boomed_filled_cells)):
y = self.boomed_filled_cells[i] // self.boomed_num_cols
x = self.boomed_filled_cells[i] % self.boomed_num_cols
rect = [x * self.boomed_cell[0] + self.boomed_rect[0], y * self.boomed_cell[1] + self.boomed_rect[1], self.boomed_cell[0], self.boomed_cell[1]]
pygame.draw.rect(screen, self.color, rect)
if self.boomed_frame > 4:
return True
else:
return False
'''重置爆炸所用到的数据'''
def resetBoom(self):
# 被击中爆炸时用
# 死一条命的时候需要播放一次死亡特效
self.one_dead = False
self.boomed_filled_cells = [3,7,12,15,17,20,24,30,36,40,44,45,53,54,58,62,68,74,78,81,83,86,91,95]
self.boomed_cell = [3, 3]
self.boomed_num_cols = 11
self.boomed_num_rows = 9
self.boomed_rect = pygame.Rect(0, 0, self.boomed_num_cols*self.boomed_cell[0], self.boomed_num_rows*self.boomed_cell[1])
# 控制每帧的时间
self.boomed_count = 0
# 爆炸特效当前帧
self.boomed_frame = 0
'''ufo类'''
class ufoSprite(pygame.sprite.Sprite):
def __init__(self, color, **kwargs):
pygame.sprite.Sprite.__init__(self)
# 击中该类获得的奖励
self.reward = 200
self.color = color
self.reset()
'''在屏幕上画出来'''
def draw(self, screen):
if self.is_dead:
return None
for i in range(0, len(self.filled_cells)):
y = self.filled_cells[i] // self.num_cols
x = self.filled_cells[i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
'''更新UFO位置等信息'''
def update(self, WIDTH):
if self.rect.x + self.rect.width < 0 or self.rect.x > WIDTH:
self.rect.x += self.low_speed
else:
self.rect.x += self.high_speed
if self.rect.x > WIDTH + 500:
self.reset()
'''被击中后爆炸'''
def boom(self, screen):
self.boomed_rect.x = self.rect.x
self.boomed_rect.y = self.rect.y
self.boomed_count += 1
if self.boomed_count % 1 == 0:
self.boomed_frame += 1
for i in range(0, len(self.boomed_filled_cells)):
y = self.boomed_filled_cells[i] // self.boomed_num_cols
x = self.boomed_filled_cells[i] % self.boomed_num_cols
rect = [x * self.boomed_cell[0] + self.boomed_rect[0], y * self.boomed_cell[1] + self.boomed_rect[1], self.boomed_cell[0], self.boomed_cell[1]]
pygame.draw.rect(screen, self.color, rect)
if self.boomed_frame > 4:
return True
else:
return False
'''重置'''
def reset(self):
self.cell = [3, 3]
self.num_cols = 16
self.num_rows = 7
self.rect = pygame.Rect(-500-self.num_cols*self.cell[0], 60, self.num_cols*self.cell[0], self.num_rows*self.cell[1])
self.filled_cells = [5,6,7,8,9,10,19,20,21,22,23,24,25,26,27,28,34,35,36,37,38,39,40,41,42,43,44,45,49,50,52,53,55,56,58,59,61,62,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,82,83,84,87,88,91,92,93,99,108]
self.low_speed = 1
self.high_speed = 2
self.is_dead = False
# 被击中爆炸时用
# 是否已经显示了爆炸特效
self.has_boomed = False
self.boomed_filled_cells = [3,7,12,15,17,20,24,30,36,40,44,45,53,54,58,62,68,74,78,81,83,86,91,95]
self.boomed_cell = [3, 3]
self.boomed_num_cols = 11
self.boomed_num_rows = 9
self.boomed_rect = pygame.Rect(0, 0, self.boomed_num_cols*self.boomed_cell[0], self.boomed_num_rows*self.boomed_cell[1])
self.boomed_count = 0
self.boomed_frame = 0
'''敌方类'''
class enemySprite(pygame.sprite.Sprite):
def __init__(self, category, number, color, bullet_color, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.cell = [3, 3]
# 编号
self.number = number
# 种类
self.category = category
if category == 'small':
self.reward = 20
self.num_cols = 8
self.num_rows = 8
self.rect = pygame.Rect(0, 0, self.num_cols*self.cell[0], self.num_rows*self.cell[1])
self.filled_cells = [[3,4,10,11,12,13,17,18,19,20,21,22,24,25,27,28,30,31,32,33,34,35,36,37,38,39,42,45,49,51,52,54,56,58,61,63],
[3,4,10,11,12,13,17,18,19,20,21,22,24,25,27,28,30,31,32,33,34,35,36,37,38,39,41,43,44,46,48,55,57,62]]
elif category == 'medium':
self.reward = 15
self.num_cols = 11
self.num_rows = 8
self.rect = pygame.Rect(0, 0, self.num_cols*self.cell[0], self.num_rows*self.cell[1])
self.filled_cells = [[2,8,11,14,18,21,22,24,25,26,27,28,29,30,32,33,34,35,37,38,39,41,42,43,44,45,46,47,48,49,50,51,52,53,54,56,57,58,59,60,61,62,63,64,68,74,78,86],
[2,8,14,18,24,25,26,27,28,29,30,34,35,37,38,39,41,42,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,62,63,65,66,68,74,76,80,81,83,84]]
elif category == 'large':
self.reward = 10
self.num_cols = 12
self.num_rows = 8
self.rect = pygame.Rect(0, 0, self.num_cols*self.cell[0], self.num_rows*self.cell[1])
self.filled_cells = [[4,5,6,7,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,62,63,64,67,68,69,73,74,77,78,81,82,86,87,92,93],
[4,5,6,7,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,41,42,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,63,64,67,68,74,75,77,78,80,81,84,85,94,95]]
self.color = color
self.bullet_color = bullet_color
self.speed = [8, 20]
self.change_count = 0
self.change_flag = False
# 被击中爆炸时用
self.boomed_filled_cells = [3,7,12,15,17,20,24,30,36,40,44,45,53,54,58,62,68,74,78,81,83,86,91,95]
self.boomed_cell = [3, 3]
self.boomed_num_cols = 11
self.boomed_num_rows = 9
self.boomed_rect = pygame.Rect(0, 0, self.boomed_num_cols*self.boomed_cell[0], self.boomed_num_rows*self.boomed_cell[1])
self.boomed_count = 0
self.boomed_frame = 0
'''射击'''
def shot(self):
return enemyBulletSprite(self.rect.x + self.rect.width // 2, self.rect.y, self.bullet_color)
'''在屏幕上画出来'''
def draw(self, screen):
if self.change_count > 50:
self.change_count = 0
self.change_flag = not self.change_flag
if self.change_flag:
for i in range(0, len(self.filled_cells[0])):
y = self.filled_cells[0][i] // self.num_cols
x = self.filled_cells[0][i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
else:
for i in range(0, len(self.filled_cells[1])):
y = self.filled_cells[1][i] // self.num_cols
x = self.filled_cells[1][i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
'''更新敌方位置等信息'''
def update(self, direction, HEIGHT):
# 用于改变形状
self.change_count += 1
# 更新位置信息
if direction == 'right':
self.rect.x += self.speed[0]
elif direction == 'left':
self.rect.x -= self.speed[0]
elif direction == 'down':
self.rect.y += self.speed[1]
if self.rect.y >= HEIGHT - self.rect.height:
return True
else:
return False
'''被击中后爆炸'''
def boom(self, screen):
self.boomed_rect.x = self.rect.x
self.boomed_rect.y = self.rect.y
self.boomed_count += 1
if self.boomed_count % 1 == 0:
self.boomed_frame += 1
for i in range(0, len(self.boomed_filled_cells)):
y = self.boomed_filled_cells[i] // self.boomed_num_cols
x = self.boomed_filled_cells[i] % self.boomed_num_cols
rect = [x * self.boomed_cell[0] + self.boomed_rect[0], y * self.boomed_cell[1] + self.boomed_rect[1], self.boomed_cell[0], self.boomed_cell[1]]
pygame.draw.rect(screen, self.color, rect)
if self.boomed_frame > 4:
return True
else:
return False
'''我方子弹精灵类'''
class myBulletSprite(pygame.sprite.Sprite):
def __init__(self, x, y, color, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.cell = [2, 2]
self.num_cols = 1
self.num_rows = 4
self.rect = pygame.Rect(x, y, self.num_cols*self.cell[0], self.num_rows*self.cell[1])
self.filled_cells = [0,1,2,3]
self.speed = 8
self.color = color
'''在屏幕上画出来'''
def draw(self, screen):
for i in range(0, len(self.filled_cells)):
y = self.filled_cells[i] // self.num_cols
x = self.filled_cells[i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
'''更新子弹位置等信息'''
def update(self):
self.rect.y -= self.speed
if self.rect.y + self.rect.height < 0:
return True
else:
return False
'''敌方子弹精灵类'''
class enemyBulletSprite(pygame.sprite.Sprite):
def __init__(self, x, y, color):
pygame.sprite.Sprite.__init__(self)
self.cell = [3, 3]
self.num_cols = 3
self.num_rows = 7
self.rect = pygame.Rect(x, y, self.num_cols*self.cell[0], self.num_rows*self.cell[1])
self.filled_cells = [[0,4,8,10,12,16,20],
[2,4,6,10,14,16,18]]
self.change_count = 0
self.change_flag = False
self.speed = 4
self.color = color
'''在屏幕上画出来'''
def draw(self, screen):
if self.change_count > 2:
self.change_count = 0
self.change_flag = not self.change_flag
if self.change_flag:
for i in range(0, len(self.filled_cells[0])):
y = self.filled_cells[0][i] // self.num_cols
x = self.filled_cells[0][i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
else:
for i in range(0, len(self.filled_cells[1])):
y = self.filled_cells[1][i] // self.num_cols
x = self.filled_cells[1][i] % self.num_cols
rect = [x * self.cell[0] + self.rect[0], y * self.cell[1] + self.rect[1], self.cell[0], self.cell[1]]
pygame.draw.rect(screen, self.color, rect)
'''更新子弹位置等信息'''
def update(self, HEIGHT):
# 用于改变子弹形状的计数
self.change_count += 1
# 位置信息
self.rect.y += self.speed
if self.rect.y > HEIGHT:
return True
else:
return False
'''一些常量'''
WIDTH = 800
HEIGHT = 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (50, 250, 5)
RED = (255, 0, 0)
FPS = 60
'''
Function:
开始游戏
'''
def startGame(screen):
clock = pygame.time.Clock()
# 加载字体
font = pygame.font.SysFont('arial', 18)
if not os.path.isfile('score'):
f = open('score', 'w')
f.write('0')
f.close()
with open('score', 'r') as f:
highest_score = int(f.read().strip())
# 敌方
enemies_group = pygame.sprite.Group()
for i in range(55):
if i < 11:
enemy = enemySprite('small', i, WHITE, WHITE)
elif i < 33:
enemy = enemySprite('medium', i, WHITE, WHITE)
else:
enemy = enemySprite('large', i, WHITE, WHITE)
enemy.rect.x = 85 + (i % 11) * 50
enemy.rect.y = 120 + (i // 11) * 45
enemies_group.add(enemy)
boomed_enemies_group = pygame.sprite.Group()
en_bullets_group = pygame.sprite.Group()
ufo = ufoSprite(color=RED)
# 我方
myaircraft = aircraftSprite(color=GREEN, bullet_color=WHITE)
my_bullets_group = pygame.sprite.Group()
# 用于控制敌方位置更新
# 移动一行
enemy_move_count = 24
enemy_move_interval = 24
enemy_move_flag = False
# 改变移动方向(改变方向的同时集体下降一次)
enemy_change_direction_count = 0
enemy_change_direction_interval = 60
enemy_need_down = False
enemy_move_right = True
enemy_need_move_row = 6
enemy_max_row = 5
# 用于控制敌方发射子弹
enemy_shot_interval = 100
enemy_shot_count = 0
enemy_shot_flag = False
# 游戏进行中
running = True
is_win = False
# 主循环
while running:
screen.fill(BLACK)
for event in pygame.event.get():
# 点右上角的X或者按Esc键退出游戏
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit()
# 射击
if event.type == pygame.MOUSEBUTTONDOWN:
my_bullet = myaircraft.shot()
if my_bullet:
my_bullets_group.add(my_bullet)
# 我方子弹与敌方/UFO碰撞检测
for enemy in enemies_group:
if pygame.sprite.spritecollide(enemy, my_bullets_group, True, None):
boomed_enemies_group.add(enemy)
enemies_group.remove(enemy)
myaircraft.score += enemy.reward
if pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):
ufo.is_dead = True
myaircraft.score += ufo.reward
# 更新并画敌方
# 敌方子弹
enemy_shot_count += 1
if enemy_shot_count > enemy_shot_interval:
enemy_shot_flag = True
enemies_survive_list = [enemy.number for enemy in enemies_group]
shot_number = random.choice(enemies_survive_list)
enemy_shot_count = 0
# 敌方移动
enemy_move_count += 1
if enemy_move_count > enemy_move_interval:
enemy_move_count = 0
enemy_move_flag = True
enemy_need_move_row -= 1
if enemy_need_move_row == 0:
enemy_need_move_row = enemy_max_row
enemy_change_direction_count += 1
if enemy_change_direction_count > enemy_change_direction_interval:
enemy_change_direction_count = 1
enemy_move_right = not enemy_move_right
enemy_need_down = True
# 每次下降提高移动和射击速度
enemy_move_interval = max(15, enemy_move_interval-3)
enemy_shot_interval = max(50, enemy_move_interval-10)
# 遍历更新
for enemy in enemies_group:
if enemy_shot_flag:
if enemy.number == shot_number:
en_bullet = enemy.shot()
en_bullets_group.add(en_bullet)
if enemy_move_flag:
if enemy.number in range((enemy_need_move_row-1)*11, enemy_need_move_row*11):
if enemy_move_right:
enemy.update('right', HEIGHT)
else:
enemy.update('left', HEIGHT)
else:
enemy.update(None, HEIGHT)
if enemy_need_down:
if enemy.update('down', HEIGHT):
running = False
is_win = False
enemy.change_count -= 1
enemy.draw(screen)
enemy_move_flag = False
enemy_need_down = False
enemy_shot_flag = False
# 敌方爆炸特效
for boomed_enemy in boomed_enemies_group:
if boomed_enemy.boom(screen):
boomed_enemies_group.remove(boomed_enemy)
del boomed_enemy
# 敌方子弹与我方飞船碰撞检测
if not myaircraft.one_dead:
if pygame.sprite.spritecollide(myaircraft, en_bullets_group, True, None):
myaircraft.one_dead = True
if myaircraft.one_dead:
if myaircraft.boom(screen):
myaircraft.resetBoom()
myaircraft.num_life -= 1
if myaircraft.num_life < 1:
running = False
is_win = False
else:
# 更新飞船
myaircraft.update(WIDTH)
# 画飞船
myaircraft.draw(screen)
if (not ufo.has_boomed) and (ufo.is_dead):
if ufo.boom(screen):
ufo.has_boomed = True
else:
# 更新UFO
ufo.update(WIDTH)
# 画UFO
ufo.draw(screen)
# 画我方飞船子弹
for bullet in my_bullets_group:
if bullet.update():
my_bullets_group.remove(bullet)
del bullet
else:
bullet.draw(screen)
# 画敌方子弹
for bullet in en_bullets_group:
if bullet.update(HEIGHT):
en_bullets_group.remove(bullet)
del bullet
else:
bullet.draw(screen)
if myaircraft.score > highest_score:
highest_score = myaircraft.score
# 得分每增加2000我方飞船增加一条生命
if (myaircraft.score % 2000 == 0) and (myaircraft.score > 0) and (myaircraft.score != myaircraft.old_score):
myaircraft.old_score = myaircraft.score
myaircraft.num_life = min(myaircraft.num_life + 1, myaircraft.max_num_life)
# 敌人都死光了的话就胜利了
if len(enemies_group) < 1:
is_win = True
running = False
# 显示文字
# 当前得分
showText(screen, 'SCORE: ', WHITE, font, 200, 8)
showText(screen, str(myaircraft.score), WHITE, font, 200, 24)
# 敌人数量
showText(screen, 'ENEMY: ', WHITE, font, 370, 8)
showText(screen, str(len(enemies_group)), WHITE, font, 370, 24)
# 历史最高分
showText(screen, 'HIGHEST: ', WHITE, font, 540, 8)
showText(screen, str(highest_score), WHITE, font, 540, 24)
# FPS
showText(screen, 'FPS: ' + str(int(clock.get_fps())), RED, font, 8, 8)
# 显示剩余生命值
showLife(screen, myaircraft.num_life, GREEN)
pygame.display.update()
clock.tick(FPS)
with open('score', 'w') as f:
f.write(str(highest_score))
return is_win
'''主函数'''
def main():
# 初始化
pygame.init()
pygame.display.set_caption(u'外星人入侵-Charles的皮卡丘')
screen = pygame.display.set_mode([WIDTH, HEIGHT])
pygame.mixer.init()
pygame.mixer.music.load('./music/bg.mp3')
pygame.mixer.music.set_volume(0.4)
pygame.mixer.music.play(-1)
while True:
is_win = startGame(screen)
endInterface(screen, BLACK, is_win)
if __name__ == '__main__':
main()
参考:[Charles的皮卡丘](https://mp.weixin.qq.com/s?__biz=MzU2NDI1MjkwNA==&mid=2247485617&idx=1&sn=0ae8c372c8aa4b14d8ab9a72d6f97791&chksm=fc4c9136cb3b182025cf19e5121ef846cb14718e81b99fd395145f7881d80cb48a2f9abc89aa&scene=0&xtrack=1&key=788e29d0e375da2204cb0df7a45d748d868ef6216447a0b2a9f25fc7d831489fa694458268174868dc65000c12257c0633d59e773607a1fcb515e243e1c8ed01a7ed6856c4c1e6b63bdddb7bd75eeb6c&ascene=1&uin=MjMwMTIwNjM0NA%3D%3D&devicetype=Windows+10&version=62060720&lang=zh_CN&pass_ticket=DZ8ZqOq7KqJ6WBGD69pdmnaqHsRf7kAUfX%2FsEpbys4hjndQTsX2yvMeTHvD2TRZt)
效果预览
代码示例
import pygame
import sys
file_path = r'./turtle.jpg' # # 这里是你的图片路径
pygame.init()
size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("初次见面大家多多关照!")
turtle = pygame.image.load(file_path)
position = turtle.get_rect()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
position = position.move(speed)
if position.left < 0 or position.right > width:
turtle = pygame.transform.flip(turtle, True, False)
speed[0] = -speed[0]
if position.top < 0 or position.bottom > height:
speed[1] = -speed[1]
screen.fill(bg)
screen.blit(turtle, position)
pygame.display.flip()
pygame.time.delay(10)
代码由黑科技的孙凯同学提供。
欢迎斧正,that's all
效果
代码示例
import turtle
import time
turtle.pensize(5)
turtle.pencolor("yellow")
turtle.fillcolor("red")
turtle.begin_fill()
for _ in range(5):
turtle.forward(200)
turtle.right(144)
turtle.end_fill()
time.sleep(2)
turtle.penup()
turtle.goto(-150, -120)
turtle.color("violet")
turtle.write("Done", font=('Arial', 40, 'normal'))
time.sleep(2)
that's all, see also:
效果
示例代码
import turtle as t
import time
t.color("red", "yellow")
t.speed(10)
t.begin_fill()
for _ in range(50):
t.forward(200)
t.left(170)
t.end_fill()
time.sleep(1)
参考:[10分钟轻松学会 Python turtle 绘图](https://www.cnblogs.com/nowgood/p/turtle.html)
效果
额!这个蟒蛇不太凶!
代码示例
import turtle
import time
def drawSnake(rad, angle, len, neckrad):
for _ in range(len):
turtle.circle(rad, angle)
turtle.circle(-rad, angle)
turtle.circle(rad, angle / 2)
turtle.forward(rad / 2) # 直线前进
turtle.circle(neckrad, 180)
turtle.forward(rad / 4)
if __name__ == "__main__":
turtle.setup(1500, 1400, 0, 0)
turtle.pensize(30) # 画笔尺寸
turtle.pencolor("green")
turtle.seth(-40) # 前进的方向
drawSnake(70, 80, 2, 15)
time.sleep(2)
that's all, see also:
效果
代码示例
import turtle
# 画鼻子
def drawNose():
turtle.penup()
turtle.seth(90)
turtle.fd(100)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor('black')
turtle.seth(45)
turtle.fd(25)
turtle.seth(135)
turtle.circle(25, 95)
turtle.seth(315)
turtle.fd(25)
turtle.end_fill()
# 画眼睛
def drawEyes(seth, fd, r):
turtle.penup()
turtle.seth(seth)
turtle.fd(fd)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor('black')
turtle.circle(50)
turtle.end_fill()
turtle.penup()
turtle.circle(50, r)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor('white')
turtle.circle(20)
turtle.end_fill()
# 画脸
def drawFace(seth, fd):
turtle.penup()
turtle.seth(seth)
turtle.fd(fd)
turtle.pendown()
turtle.begin_fill()
turtle.fillcolor('red')
turtle.circle(70)
turtle.end_fill()
# 画嘴巴
def drawLip():
turtle.penup()
turtle.seth(135)
turtle.fd(250)
turtle.pendown()
turtle.seth(-300)
turtle.circle(30, -65)
turtle.begin_fill()
turtle.fillcolor('Firebrick')
turtle.seth(165)
turtle.fd(140)
turtle.seth(195)
turtle.fd(140)
turtle.seth(-360)
turtle.circle(30, -65)
turtle.penup()
turtle.seth(-60)
turtle.circle(30, 65)
turtle.pendown()
turtle.seth(-70)
turtle.fd(240)
turtle.circle(55, 140)
turtle.seth(70)
turtle.fd(240)
turtle.end_fill()
turtle.seth(-110)
turtle.fd(80)
turtle.begin_fill()
turtle.fillcolor('Firebrick')
turtle.seth(120)
turtle.circle(120, 123)
turtle.seth(-70)
turtle.fd(165)
turtle.circle(55, 140)
turtle.seth(72)
turtle.fd(165)
turtle.end_fill()
# 主函数
def main():
turtle.pensize(4)
turtle.hideturtle()
turtle.setup(1000, 600)
turtle.speed(10)
turtle.screensize(bg='yellow')
drawNose()
drawEyes(160, 250, 60)
drawEyes(-9.5, 530, 230)
drawFace(195, 600)
drawFace(-11, 720)
drawLip()
turtle.done()
if __name__ == '__main__':
main()
参考:[Charles的皮卡丘](https://mp.weixin.qq.com/s?__biz=MzU2NDI1MjkwNA==&mid=2247485551&idx=1&sn=65ecb00d1ea29c1c91d4d468cbc2244f&chksm=fc4c91e8cb3b18fe61e516c22ee4ea95dbb01f9d0ace2f2d5c69322c4b747b9e919a6c9c8d90&scene=0&xtrack=1&key=1f3fd4f811b89077b8733eba44108bc197ac1f828c753a6f3c893b1e2962d5503a415f70a26239c94d55c512f35c77099870fbeafd52d0aee8bbb89bbbb401ceb46f702754934c30b368720f1531bce8&ascene=1&uin=MjMwMTIwNjM0NA%3D%3D&devicetype=Windows+10&version=62060720&lang=zh_CN&pass_ticket=DZ8ZqOq7KqJ6WBGD69pdmnaqHsRf7kAUfX%2FsEpbys4hjndQTsX2yvMeTHvD2TRZt)
效果
代码示例
import turtle as t
# 绘制小猪佩奇
# =======================================
t.pensize(4)
t.hideturtle()
t.colormode(255)
t.color((255, 155, 192), "pink")
t.setup(840, 500)
t.speed(10)
# 鼻子
t.pu()
t.goto(-100, 100)
t.pd()
t.seth(-30)
t.begin_fill()
a = 0.4
for i in range(120):
if 0 <= i < 30 or 60 <= i < 90:
a = a + 0.08
t.lt(3) # 向左转3度
t.fd(a) # 向前走a的步长
else:
a = a - 0.08
t.lt(3)
t.fd(a)
t.end_fill()
t.pu()
t.seth(90)
t.fd(25)
t.seth(0)
t.fd(10)
t.pd()
t.pencolor(255, 155, 192)
t.seth(10)
t.begin_fill()
t.circle(5)
t.color(160, 82, 45)
t.end_fill()
t.pu()
t.seth(0)
t.fd(20)
t.pd()
t.pencolor(255, 155, 192)
t.seth(10)
t.begin_fill()
t.circle(5)
t.color(160, 82, 45)
t.end_fill()
# 头
t.color((255, 155, 192), "pink")
t.pu()
t.seth(90)
t.fd(41)
t.seth(0)
t.fd(0)
t.pd()
t.begin_fill()
t.seth(180)
t.circle(300, -30)
t.circle(100, -60)
t.circle(80, -100)
t.circle(150, -20)
t.circle(60, -95)
t.seth(161)
t.circle(-300, 15)
t.pu()
t.goto(-100, 100)
t.pd()
t.seth(-30)
a = 0.4
for i in range(60):
if 0 <= i < 30 or 60 <= i < 90:
a = a + 0.08
t.lt(3) # 向左转3度
t.fd(a) # 向前走a的步长
else:
a = a - 0.08
t.lt(3)
t.fd(a)
t.end_fill()
# 耳朵
t.color((255, 155, 192), "pink")
t.pu()
t.seth(90)
t.fd(-7)
t.seth(0)
t.fd(70)
t.pd()
t.begin_fill()
t.seth(100)
t.circle(-50, 50)
t.circle(-10, 120)
t.circle(-50, 54)
t.end_fill()
t.pu()
t.seth(90)
t.fd(-12)
t.seth(0)
t.fd(30)
t.pd()
t.begin_fill()
t.seth(100)
t.circle(-50, 50)
t.circle(-10, 120)
t.circle(-50, 56)
t.end_fill()
# 眼睛
t.color((255, 155, 192), "white")
t.pu()
t.seth(90)
t.fd(-20)
t.seth(0)
t.fd(-95)
t.pd()
t.begin_fill()
t.circle(15)
t.end_fill()
t.color("black")
t.pu()
t.seth(90)
t.fd(12)
t.seth(0)
t.fd(-3)
t.pd()
t.begin_fill()
t.circle(3)
t.end_fill()
t.color((255, 155, 192), "white")
t.pu()
t.seth(90)
t.fd(-25)
t.seth(0)
t.fd(40)
t.pd()
t.begin_fill()
t.circle(15)
t.end_fill()
t.color("black")
t.pu()
t.seth(90)
t.fd(12)
t.seth(0)
t.fd(-3)
t.pd()
t.begin_fill()
t.circle(3)
t.end_fill()
# 腮
t.color((255, 155, 192))
t.pu()
t.seth(90)
t.fd(-95)
t.seth(0)
t.fd(65)
t.pd()
t.begin_fill()
t.circle(30)
t.end_fill()
# 嘴
t.color(239, 69, 19)
t.pu()
t.seth(90)
t.fd(15)
t.seth(0)
t.fd(-100)
t.pd()
t.seth(-80)
t.circle(30, 40)
t.circle(40, 80)
# 身体
t.color("red", (255, 99, 71))
t.pu()
t.seth(90)
t.fd(-20)
t.seth(0)
t.fd(-78)
t.pd()
t.begin_fill()
t.seth(-130)
t.circle(100, 10)
t.circle(300, 30)
t.seth(0)
t.fd(230)
t.seth(90)
t.circle(300, 30)
t.circle(100, 3)
t.color((255, 155, 192), (255, 100, 100))
t.seth(-135)
t.circle(-80, 63)
t.circle(-150, 24)
t.end_fill()
# 手
t.color((255, 155, 192))
t.pu()
t.seth(90)
t.fd(-40)
t.seth(0)
t.fd(-27)
t.pd()
t.seth(-160)
t.circle(300, 15)
t.pu()
t.seth(90)
t.fd(15)
t.seth(0)
t.fd(0)
t.pd()
t.seth(-10)
t.circle(-20, 90)
t.pu()
t.seth(90)
t.fd(30)
t.seth(0)
t.fd(237)
t.pd()
t.seth(-20)
t.circle(-300, 15)
t.pu()
t.seth(90)
t.fd(20)
t.seth(0)
t.fd(0)
t.pd()
t.seth(-170)
t.circle(20, 90)
# 脚
t.pensize(10)
t.color((240, 128, 128))
t.pu()
t.seth(90)
t.fd(-75)
t.seth(0)
t.fd(-180)
t.pd()
t.seth(-90)
t.fd(40)
t.seth(-180)
t.color("black")
t.pensize(15)
t.fd(20)
t.pensize(10)
t.color((240, 128, 128))
t.pu()
t.seth(90)
t.fd(40)
t.seth(0)
t.fd(90)
t.pd()
t.seth(-90)
t.fd(40)
t.seth(-180)
t.color("black")
t.pensize(15)
t.fd(20)
# 尾巴
t.pensize(4)
t.color((255, 155, 192))
t.pu()
t.seth(90)
t.fd(70)
t.seth(0)
t.fd(95)
t.pd()
t.seth(0)
t.circle(70, 20)
t.circle(10, 330)
t.circle(70, 30)
t.done()
from random import shuffle
# 买牌环节
tf = ["\u2665", "\u2660", "\u2666", "\u2663"]
num = [3, 4, 5, 6, 7, 8, 9, 10, "J", "Q", "K", "A", 2]
poke_dict_a = {}
poke_dict_b = {}
poke_list = []
player_dict = {}
qdz_dict = {}
l = []
a = []
b = []
def maipai():
global poke_list, poke_dict_a, poke_dict_b
for j in num:
for k in tf:
poke_list.append(str(j) + k)
poke_list.append("XXW")
poke_list.append("DDW")
print(len(poke_list), poke_list)
for i in range(0, 54):
poke_dict_a[poke_list[i]] = i + 1
poke_dict_b[i + 1] = poke_list[i]
print(poke_dict_a) # 买牌结束
# 洗牌
# shuffle(poke_list)
# print(poke_list)
# 发牌
def fapai():
global player_dict
player_dict = {
"player1": [poke_list[0:17], []],
"player2": [poke_list[17:34], []],
"player3": [poke_list[34:51], []],
"dp": [poke_list[-3:], []]
}
print(player_dict)
# 码牌
def mapai():
global player_dict, poke_dict_b, poke_dict_a
for k, v in player_dict.items():
l = []
for i in v[0]:
v[1].append(poke_dict_a[i])
v[1] = sorted(v[1])
for j in v[1]:
l.append(poke_dict_b[j])
player_dict[k] = l
print(player_dict)
# 抢地主
def qdz():
global qdz_dict, l, player_dict
qdz_dict = {
input("玩家1请下注:"): player_dict["player1"],
input("玩家2请下注:"): player_dict["player2"],
input("玩家3请下注:"): player_dict["player3"]
}
for i in qdz_dict:
l.append(int(i))
l = sorted(l)
qdz_dict[str(l[-1])] += player_dict['dp']
print(qdz_dict)
# 地主牌排序
def zpx():
global a, b, poke_dict_a, poke_dict_b, qdz_dict
for i in qdz_dict[str(l[-1])]:
a.append(poke_dict_a[i])
for i in sorted(a):
b.append(poke_dict_b[i])
qdz_dict[str(l[-1])] = b
print(qdz_dict)
# 出牌
maipai()
shuffle(poke_list)
fapai()
mapai()
qdz()
zpx()