十三张游戏名字——张字开头的游戏名字
门
还记得那个时候我们玩的Windows游戏吗?
说到Windows固有的游戏,相信80、90后的很多朋友不会陌生。
在很早的那个游戏贫瘠的年代,《纸牌》、《扫雷》等游戏帮助我们在微机课上带来了许多欢
乐的时光。但在这些游戏中,有一款游戏似乎玩得懂的人,甚至知道玩法的人并不多。这款游戏
就是《红心大战》。
最近小编心血来潮仔细钻研了一下之后,发现这款游戏玩起来确实比其他的几款游戏更带感
一些。因为这款游戏的玩法简单概括就是两个字:“坑人”,而且是明着坑的那种。
那大家猜到了哈——今天跟着木木子一起开启《红心大战》纸牌小游戏吧!
正文
一、 红心大战用户手册
1.打开游戏:双击 主程序运行即可!
2.开始游戏:键入玩家姓名,创建新ID,点确认进入游戏。
3.游戏流程:
1)换牌:
选择三张手牌,点击上方按钮完成交换;
2)出牌:
轮到玩家出牌时,选择手牌单击便可打出。(具体出牌规则详见附录)
注:当此时机不能打出此牌时,下方提示栏会显示无法打出原因。
4.统分阶段:一轮游戏过后,会弹出得分表,显示玩家和三名电脑每轮积分和总积分,并显示
玩家当前名次。(具体胜负判定规则详见附录)
5.菜单栏:
1)游戏栏:
新游戏(F2):单击开启新游戏。
得分(F4):单击显示得分表。
背景音乐:单击切换音乐开关。
选项(F5):单击修改电脑出牌速度。
退出:单击退出游戏。
2)帮助栏:
规则介绍(F1):单击显示简要规则和获胜条件。
名言:单击弹出一则名言。
6.背景音乐:更换:可用自己的wav格式音乐重命名为‘m1.wav’替换程序目录下的同名文件。
二、红心大战游戏规则:
1、在玩游戏前,需要决定庄家。在电脑中,庄家坐南。 2、拿到一手牌(共计13张)后,庄家首先须选出三张牌传给其他对手。第一局把牌传给左手
边的玩家;第二局把牌传给右手边的玩家;第三局把牌传给坐在对面的玩家;第四局不传牌,
依此类推。接到庄家的传牌后,也需要任意传回给庄家三张牌。在电脑中,如要选牌,单击相
应牌张即可。如要取消选定的牌,请再次单击。
3、抓有梅花2 的玩家必须首先出梅花2,谓首攻。
4、然后按顺时针方向出牌。每位玩家依次必须跟同花色牌。如果已经没有与发牌花色相同的
牌,则可以出任何一张牌。唯一例外是不能在第一圈牌中出红桃或黑桃Q(通常称为“猪”)。注
意:出的同一花色牌中最大的牌会赢取这一圈,赢牌的玩家在下一圈中先出牌。只有前面出过
红桃以后,才可以拿红桃领出(除非手中只剩下红桃一种花色的牌张)。
5,、每一轮游戏结束时,每张红心计1 分,“黑桃皇后(猪)”计13 分。游戏将持续到有人得
100 分或更多分或者庄家退出游戏时结束。如果在一轮牌中赢得了所有的红心和“黑桃皇
后”(称之为“全收”),则“全收”者得零分,其余玩家每人得26 分。该游戏的得分越低越好。
三、准备中
1)环境安装
▲环境安装 本文用到的运行环境:Py、Pycharm社区版2020、tkinter模块、部分
自带模块直接导入不需要安装。(如果需要安装软件、激活码或者遇到问题的话可以私信我
哈!) 模块安装:pip install -i +模块名
2)背景选择
最原始的绿色背景。(仅展示背景,其余图片比较多不展示)参考为最上面第二个图片
四、代码演示
仅展示主程序源码。每行代码都有注释所以直接展示!全部的源码见文末!
from Tkinter import *
from tkFont import *
import winsound
from tkMessageBox import *
from inner import *
from dialog import *
#游戏主界面创建
class GameFrame:
def __init__(self,game,bgimg):#game,Game类对象;bgimg,背景图片
= game.root
#创建画布,绘制背景
= Canvas(,width = 1024,height = 640)
.create_image(514,322,image=bgimg)
.pack()
#创建状态条
= Label(,text=" 欢迎参加红心大战!",
bd=1,relief=SUNKEN,anchor=W)
.pack(fill = X)
#打开开始对话框
startdialog = StartDialog(,"红心大战")
if :
game.cancel()
else:
= ['向左传','向右传','交叉换牌']
= [;西','北','东']
= [[346.5,490,1,0],[20,135,0,1],
[586.5,20,-1,0],[913,375,0,-1]]
XY = [[-20,130,SE],[0,-20,SW],[91+20,0,NW],[91,130+20,NE]]
= [[466.5,330],[411,255],[466.5,180],[522,255]]
= 53 * ['']
for i in range(52):
[i] = PhotoImage(file = 'card\\%s.pgm' % (i))
[52] = PhotoImage(file = 'back.pgm')
= []
ards = []
= 0
= 100
=
= False
= False
#绘制名字
for i in range(4):
.create_text([i][0]+XY[i][0],
[i][1]+XY[i][1],
fill = 'white',text = [i],
anchor = XY[i][2],
font = Font(size=15,weight="bold"))
#创建手牌
= 52 * ['']
for i in range(52):
[i] = Label(,image=[52],bd = -1)
for i in range(13):
[i]['text'] = str(i)
[i].bind("<Button-1>",ardEvent)
#创建中央牌
= 4 * ['']
for i in range(4):
[i] = Label(,image=[52],bd = -1)
= Button(,width=15,command=uttonEvent)
#一轮游戏开始
()
def oneGameStart(self):
#创建Onegame对象,用来获取出牌信息
= OneGame()
#获取玩家手牌,显示
hand = .getPlayerHand(0)
for i in range(13):
[i]['image'] = [hand[i].id]
for i in range(4):
for j in range(13):
(i,j,0)
#游戏模式为0,1,2时进入换牌阶段
if != 3:
hangeHands()
else:
.changeCards([],3)
= False
eftCards = 13
#进入出牌阶段,玩家前的电脑出牌
()
def changeHands(self):
#换牌阶段相应初始化
= []#所选的牌
= True
= False
s = [1,3,2]
['text'] = ' 请选三张牌传给'+[s[]]+'。'
#提示按钮显示
['text'] = []
.place(x = 460,y = 400)
['state'] = DISABLED
def cardEvent(self,event):
#牌的事件
#获取牌的位置
i = in['text'])
if not :
#出牌阶段的牌事件
#等待中不出牌
if :
return
#出不了的牌不出
if not .available(i):
['text'] = .errorString
return
.playCard(i)
#所出牌显示到中央
event.widget.place_forget()
[]['image'] = event.widget['image']
[].place(x = [0][0],y = [0][1])
+= 1
eftCards -= 1
#玩家后的电脑出牌
= True
()
['text'] = ' 正在等候……'
+= 500 + 5 *
#等待一段时间后,中央牌清空,玩家前的电脑出牌
.after(,)
=
else:
#换牌阶段的牌事件,弹起的落下,落下的弹起
if not :
if i in :
.remove(i)
(0,i,0)
['state'] = DISABLED
else:
if len() < 3:
.append(i)
(0,i,1)
if len() == 3:
['state'] = NORMAL
def buttonEvent(self):
#提示按钮事件
if not :
#换牌前获取电脑换的牌进行交换
= .changeCards(,)
hand = .getPlayerHand(0)
for i in range(13):
[i]['image'] = [hand[i].id]
(0,i,0)
for i in :
(0,i,1)
['text'] = ' 请按"确定"接受传来的牌。'
['text'] = '确定'
= True
else:
#换牌后进行确认,进入出牌阶段,玩家前的电脑出牌
for i in :
(0,i,0)
.place_forget()
= False
eftCards = 13
()
def playpreCards(self):
if eftCards == 0:
#牌出完了进行统分,显示得分对话框
for i in range(4):
hand = .p[i].scoreHand
for j in range(len(hand)):
[i*13+j]['image'] = [hand[j].id]
(i,j,0)
score = .getScore()
.append(score)
if len() != 1:
for i in range(4):
[-1][i] += [-2][i]
['text'] = ' 得分'
scoredialog = ()
#得分确认后初始化,开始新一轮游戏
if :
= []
= 0
else:
= ( + 1) % 4
for i in range(52):
[i].place_forget()
[i]['image'] = [52]
for i in range(4):
[i].place_forget()
()
else:
#获取玩家之前的电脑出牌,进行显示
for i in range(4):
[i].place_forget()
= 0
preCards = .preCard
if len(preCards) == 0:
()
else:
for i in range(len(preCards)):
p,j = preCards[i][0],preCards[i][1]
ards.append([,p,j])
.after(,howMiddleCard)
if p == 3:
.after(,)
=
else:
+=
+= 1
def playlaterCards(self):
#获取玩家之后的电脑出牌,进行显示
laterCards = .laterCard
for i in range(len(laterCards)):
p,j = laterCards[i][0],laterCards[i][1]
ards.append([,p,j])
.after(,howMiddleCard)
+=
+= 1
def moveCard(self,i,j,state):#i,玩家;j,第几张牌;state,弹起还是放下
#牌的移动
[i*13+j].place_forget()
x0 = [i][0] + [i][2]*j*20
y0 = [i][1] + [i][3]*j*20
[i*13+j].place(x = x0,y = y0 - state * 20)
def newGame(self):
#新游戏
= []
= 0
for i in range(52):
[i].place_forget()
[i]['image'] = [52]
for i in range(4):
[i].place_forget()
()
def showScoreDialog(self):
#显示分数对话框
scoredialog = ScoreDialog(,,)
return scoredialog
def showMiddleCard(self):
#中央牌显示
i = ards[0][0]
p = ards[0][1]
j = ards[0][2]
del ards[0]
[p*13+j].place_forget()
hand = .getPlayerHand(p)
[i]['image'] = [hand[j].id]
[i].place(x = [p][0],
y = [p][1])
def end(self):
#电脑出完牌至玩家出牌的切换
= False
['text'] = ' 请出一张牌。'
#游戏窗口创建,并建立游戏菜单项
class Game:
def __init__(self):
#建立根窗口,设置
= Tk()
.title("红心大战")
.geometry('+150+10')
.resizable(False, False)
#播放背景音乐
= win('m1.wav',
win)
#建立菜单
m = Menu()
['menu'] = m
gamemenu = Menu(m)
helpmenu = Menu(m)
m.add_cascade(label = '游戏',menu = gamemenu)
m.add_cascade(label = '帮助',menu = helpmenu)
gamemenu.add_command(label="新游戏 F2",command = )
gamemenu.add_separator()
gamemenu.add_command(label="得分... F4",command = )
gamemenu.add_command(label="选项... F5",command = )
= IntVar()
.set(1)
gamemenu.add_checkbutton(label="背景音乐",variable = ,
command = )
gamemenu.add_separator()
gamemenu.add_command(label="退出",command = ancel)
(label="规则介绍... F1",command = )
(label="名言...",command = )
.bind('<F2>',)
.bind('<F4>',)
.bind('<F5>',)
.bind('<F1>',)
.protocol("WM_DELETE_WINDOW",ancel)
#导入背景图片
bgimg = PhotoImage(file = 'bg.gif')
#创建主界面
= GameFrame(self,bgimg)
#主循环
.mainloop()
def gameEvent1(self,event=None):
#游戏菜单项”新游戏“
flag = askokcancel('新游戏','你确定要放弃当前游戏开始新游戏么?')
if flag:
.newGame()
def gameEvent2(self,event=None):
#游戏菜单项”得分“
.showScoreDialog()
def gameEvent3(self):
#游戏菜单项”背景音乐“
if .get() == 0:
win(,winsound.SND_PURGE)
else:
= win('m1.wav',
win)
def gameEvent4(self,event=None):
#游戏菜单项”选项“
optionDialog = OptionDialog(,.speed / 100 - 1)
if not o:
.speed = 100 + o() * 100
def helpEvent1(self,event=None):
#帮助菜单项”规则介绍“
HelpDialog()
def helpEvent2(self):
#帮助菜单项”名言“
SayDialog()
def cancel(self):
#关闭音乐,退出游戏
win(,winsound.SND_PURGE)
.destroy()
def main():
Game()
if __name__ == '__main__':
main()
五、效果展示
1)游戏开始
2)游戏界面
3)左上角帮助菜单
4)游戏结束排名
总结
科技日新月异,台式“大砖头”转眼变成便携平板,当年偷偷“摸鱼”玩这些内置游戏的人
或成为职场新人,或为人父母,都开始了各自的新阶段,这些游戏也完成自己的使命!
少年时期的游戏你最喜欢哪一款?话说之前写过多期游戏了,需要源码的记得找我拿!
完整的素材、安装环境、源码等私信小编06即可免费啦~
文章汇总——
项目1.0 Python—2021 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在文章汇总哦!!欢迎阅读~)
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。