from tkinter import *
class Settings:
WIDTH = 800
HEIGHT = 600
class Game:
def init(self):
self.sm = StepMaster()
textPage = TextPage(["难忘的小事","long time ago","there's a little girl"])
textPage1 = TextPage(["suddenly a pig rushed out of the forest","then the pig hit a big tree and died","the hunter saw this.","He charried the dead pig to his village and feed his children."])
imgPage = ImgPage("figures/scene1.gif")
imgPage2 = ImgPage("figures/scene2.gif")
imgPage3 = ImgPage("figures/scene3.gif")
imgPage4 = ImgPage("figures/scene4.gif")
step0 = Step(textPage,imgPage,None)
step0.setConnections({"prev":0,"next":1})
self.sm.addStep(step0)
selBox = SelBox("which option will you choose?",["go back","kill it"])
step1 = Step(textPage,imgPage,selBox)
step1.setConnections({"prev":0,"next":-1,"1":0,"2":2})
self.sm.addStep(step1)
step2 = Step(None,imgPage2,None)
step2.setConnections({"prev":1,"next":3})
self.sm.addStep(step2)
step3 = Step(textPage1,imgPage2,None)
step3.setConnections({"prev":2,"next":4})
self.sm.addStep(step3)
selBox1 = SelBox("前方遭遇怪物,用什么职业出战?",["战士","法师","牧师","圣骑士"])
step4 = Step(textPage1,imgPage2,selBox1)
step4.setConnections({"prev":3,"next":-1,"1":5,"2":6,"3":4,"4":4})
self.sm.addStep(step4)
step5 = Step(None,imgPage3,None)
step5.setConnections({"prev":4,"next":5})
self.sm.addStep(step5)
step6 = Step(None,imgPage4,None)
step6.setConnections({"prev":4,"next":6})
self.sm.addStep(step6)
self.sm.start()
tk = Tk()
self.canvas = Canvas(tk,width=Settings.WIDTH,height=Settings.HEIGHT)
self.paint()
self.canvas.pack()
self.canvas.bind_all('<KeyPress-Right>',self.keyPressed)
self.canvas.bind_all('<KeyPress-Left>',self.keyPressed)
self.canvas.bind_all('<KeyPress-Up>',self.keyPressed)
self.canvas.bind_all('<KeyPress-Down>',self.keyPressed)
tk.mainloop()
def paint(self):
self.sm.paintCurrent(self.canvas)
self.canvas.pack()
def keyPressed(self,event):
print(event.keysym)
if event.keysym=="Left":
self.sm.leftKeyPressed()
elif event.keysym=="Right":
self.sm.rightKeyPressed()
elif event.keysym=="Up":
self.sm.upKeyPressed()
elif event.keysym=="Down":
self.sm.downKeyPressed()
self.paint()
class StepMaster:
def __init__(self):
self.current = -1
self.steps = []
def addStep(self,step):
self.steps.append(step)
def start(self):
self.current = 0
def paintCurrent(self,canvas):
currentStep = self.steps[self.current]
currentStep.paint(canvas)
def currentStep(self):
return self.steps[self.current]
def leftKeyPressed(self):
self.current = self.currentStep().prev()
def rightKeyPressed(self):
self.current = self.currentStep().next()
def upKeyPressed(self):
self.currentStep().up()
def downKeyPressed(self):
self.currentStep().down()
class Step:
def __init__(self,textPage,imgPage,selBox):
self.textPage = textPage
self.imgPage = imgPage
self.selBox = selBox
def setConnections(self,connections):
self.connections = connections
def paint(self,canvas):
if self.imgPage:
self.imgPage.paint(canvas)
if self.textPage:
self.textPage.paint(canvas)
if self.selBox:
self.selBox.paint(canvas)
def prev(self):
return self.connections["prev"]
def next(self):
if not self.selBox:
return self.connections["next"]
return self.connections[self.selBox.getChosen()]
def up(self):
if self.selBox:
self.selBox.optionUp()
def down(self):
if self.selBox:
self.selBox.optionDown()
class TextPage:
def __init__(self,contents):
self.contents = contents
def paint(self,canvas):
print("textpage painted")
j = Settings.HEIGHT*0.05
for line in self.contents:
canvas.create_text(0.5*Settings.WIDTH,j,text=line,fill="white")
j+=0.08*Settings.HEIGHT
class ImgPage:
def __init__(self,imgPath):
self.imgPath = imgPath;
def paint(self,canvas):
print("imgpage painted")
self.img = PhotoImage(file=self.imgPath)
canvas.create_image(0,0,anchor=NW,image=self.img)
class SelBox:
sbImg = None
def __init__(self,question,options):
self.question = question
self.options = options
self.chosen = 0
def paint(self,canvas):
print("selbox painted")
if not SelBox.sbImg:
SelBox.sbImg = PhotoImage(file = "figures/selbox.gif")
canvas.create_image(0,400,anchor=NW,image=SelBox.sbImg)
canvas.create_text(0.5*Settings.WIDTH,420,text=self.question)
j = 450+self.chosen*40
canvas.create_rectangle(0.1*Settings.WIDTH,j,0.9*Settings.WIDTH,j+20,fill="yellow")
j = 460
for option in self.options:
canvas.create_text(0.5*Settings.WIDTH,j,text=option)
j+=40
def getChosen(self):
return str(self.chosen+1)
def optionUp(self):
if self.chosen > 0:
self.chosen-=1
def optionDown(self):
if self.chosen < len(self.options) - 1:
self.chosen+=1
def main():
game = Game()
game.init()
main()
这个小程序是打算用于教学中的。学生只需要修改Game类的init方法,将定制的文本(TextPage),图片(ImgPage),还有选择栏(SelBox)组合成一个步(Step)对象,然后将Step交由StepMaster对象管理。Step对象需要设置步间跳转关系connecions,使得步与步之间可以有序跳转。
游戏的结构就是以步为基本单位,设置好跳转关系的步之间,可以根据SelBox的选项进行跳转,如当前步没有SelBox,则根据默认的翻页键跳转。
整个游戏就是一个交互式的电子小说,有图片,有文字,读者可以通过选择控制情节进展。
另:
1.文本默认是居中对齐,颜色为白色
2.图片必须是800*600的gif
3.选择栏选项一般不多于4个
4.音效模块并未实现
游戏界面:丑是丑了点,毕竟这么几行代码。。。(有同学能把界面调美观的直接满分~)
- 大小: 584.7 KB
分享到:
相关推荐
用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用Python设计第一个游戏用...
定义模板:首先,定义一个包含特定占位符的模板字符串。占位符可以是固定的标记,如{name},或者使用更复杂的模板语法,如{{ name }}。 准备数据:准备需要填充到模板中的数据。这些数据可以是变量、字典或其他数据...
项目概述:本简易后台服务模板基于Python的Django框架开发,共包含40个文件,主要包括19个Python源码文件(.py),15...此模板旨在为开发者提供一个快速搭建基于Django的后台服务的简易模板,方便进行项目拓展与维护。
Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀...
【资源说明】基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小...
在Python编程领域,创建一个拼图小游戏是一个经典且有趣的实践项目,尤其适合初学者提升编程技能。本项目利用Python的图形用户界面(GUI)库,如Tkinter或Pygame,来实现一个交互式的拼图游戏。下面将详细介绍这个...
在本项目中,我们探索了如何使用Python编程语言创建一个简易版的马里奥小游戏。这个小游戏虽然简单,但它展示了Python在游戏开发中的潜力,并帮助初学者了解游戏编程的基本概念。 1. **Python编程基础**:Python是...
在处理Excel文件时,Python提供了许多库,其中就包括我们今天要讨论的"Python-一个方便强大的excel模板引擎"。这个模板引擎是专门为Python3设计的,允许用户通过简单的编程方式来创建和操作复杂的Excel模板。 Excel...
python flask框架开发模板,配置了数据库迁移(migrate) 日志logger 等 启动:python runserver.py 数据库迁移 :python manage.py db init
在本项目中,"Python简易飞机大战游戏"是一款利用Python编程语言和Pygame库开发的小型游戏。Pygame是Python中一个广泛使用的模块,专为创建2D游戏和多媒体应用程序而设计。它提供了丰富的功能,包括图形绘制、事件...
Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟...
这些代码实例为Python初学者提供了一个很好的学习平台,可以帮助他们理解和掌握Python在游戏开发中的实际应用,同时也锻炼了他们的逻辑思维和问题解决能力。通过亲手实践这些代码,不仅可以增强编程技能,还能享受...
为了记录用户的输入和正确率,我们可以创建一个计数器,每当用户猜对一个字母,计数器加一。最后,当用户选择结束游戏时,根据计数器和总单词数量计算正确率,并输出鼓励语句。 在Python中,文件操作可以使用内置的...
python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目...
Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用...
标题中的“24点游戏-Python实现”是指利用Python编程语言设计的一个数学益智游戏——24点。这个游戏的目标是从四张扑克牌中,通过加、减、乘、除及括号的操作,使得运算结果等于24。这个过程锻炼了玩家的逻辑思维和...
2. **Pygame或自定义图形库**:虽然没有明确提到使用Pygame,但为了在屏幕上显示游戏界面和处理用户输入,开发者可能使用了Pygame库,这是一个Python库,专门用于开发2D游戏。如果开发者选择自定义图形库,他们可能...
python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python...
Pygame是Python的一个模块集合,提供了创建游戏所需的基本功能,如图形绘制、事件处理、音频播放等。 【pygame】是Python中的一个开源库,它建立在SDL(Simple DirectMedia Layer)之上,为Python提供了跨平台的...
接下来,我们将讨论如何创建一个模板并使用该模板生成docx文档。模板通常包含占位符,这些占位符将在运行时被动态数据替换。例如,`<%tr for column in tbl.columns%>`是一个可能的模板表达式,它可能会在循环中处理...