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
分享到:
相关推荐
定义模板:首先,定义一个包含特定占位符的模板字符串。占位符可以是固定的标记,如{name},或者使用更复杂的模板语法,如{{ name }}。 准备数据:准备需要填充到模板中的数据。这些数据可以是变量、字典或其他数据...
Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀...
【资源说明】基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小...
在Python编程领域,创建一个拼图小游戏是一个经典且有趣的实践项目,尤其适合初学者提升编程技能。本项目利用Python的图形用户界面(GUI)库,如Tkinter或Pygame,来实现一个交互式的拼图游戏。下面将详细介绍这个...
在处理Excel文件时,Python提供了许多库,其中就包括我们今天要讨论的"Python-一个方便强大的excel模板引擎"。这个模板引擎是专门为Python3设计的,允许用户通过简单的编程方式来创建和操作复杂的Excel模板。 Excel...
在本项目中,"Python简易飞机大战游戏"是一款利用Python编程语言和Pygame库开发的小型游戏。Pygame是Python中一个广泛使用的模块,专为创建2D游戏和多媒体应用程序而设计。它提供了丰富的功能,包括图形绘制、事件...
Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟...
在本项目中,"用Python编了一个简易高尔夫游戏",我们可以深入探讨Python编程在游戏开发中的应用,以及如何创建一个基础的小游戏。Python语言以其简洁明了的语法和丰富的库资源,成为初学者和专业开发者青睐的编程...
这个项目展示了如何使用Python语言和相关的游戏开发库来构建一个简单的超级玛丽游戏。下面我们将深入探讨其中涉及的技术和知识点。 1. **Python基础知识**: - Python是一种高级、动态类型的编程语言,以其简洁的...
Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用Python制作简易数字累加器 Python源码Python 使用...
2. **Pygame或自定义图形库**:虽然没有明确提到使用Pygame,但为了在屏幕上显示游戏界面和处理用户输入,开发者可能使用了Pygame库,这是一个Python库,专门用于开发2D游戏。如果开发者选择自定义图形库,他们可能...
【Python飞机游戏简易版】是基于Python编程语言开发的一款简单而有趣的飞行射击游戏。这个案例旨在教授初学者如何利用Python进行游戏开发,同时也展示了Python在图形界面和游戏编程中的应用。"良心"的描述可能意味着...
python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python...
Pygame是Python的一个模块集合,提供了创建游戏所需的基本功能,如图形绘制、事件处理、音频播放等。 【pygame】是Python中的一个开源库,它建立在SDL(Simple DirectMedia Layer)之上,为Python提供了跨平台的...
接下来,我们将讨论如何创建一个模板并使用该模板生成docx文档。模板通常包含占位符,这些占位符将在运行时被动态数据替换。例如,`<%tr for column in tbl.columns%>`是一个可能的模板表达式,它可能会在循环中处理...
Python 游戏源码 - pygame_games(13个) Python源码Python 游戏源码 - pygame_games(13个) Python源码Python 游戏源码 - pygame_games(13个) Python源码Python 游戏源码 - pygame_games(13个) Python源码...
经典小游戏20多个python源码下载,用python 中pygame模块开发的小游戏。 1.植物大战僵尸 2.小黄狗跑酷 3.飞机大战 4.外星人与飞船 5.推箱子 6.外星人大战 7.汤姆猫 8.忍者奔跑 9.绘制满天星 10.扫雷 11.数字消除 12....
一个使用Python制作的游戏防沉迷程序源代码,若超出允许游戏的时间段及时长,则结束游戏进程以达到防沉迷效果,注释中包含转换为.exe文件的方法
本案例中的"fishdome_python魔兽钓鱼模板匹配测试代码_"是一个Python项目,它主要用于在魔兽世界游戏中实现自动钓鱼的功能。通过模板匹配,程序可以识别游戏界面中的特定元素,如鱼鳔,从而触发相应的操作,比如点击...
游戏规则: 1.每局游戏开始时会给每位玩家随机分发两张牌; 2.两张牌加起来的点数最大者获胜。 每次洗牌前先按顺序建立牌堆,然后按游戏规则循环进行。 代码内有详细注释。