`

一个简易的AVG游戏模板(python)

阅读更多
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设计第一个游戏用Python设计第一个游戏用...

    Python实现模板打印

    定义模板:首先,定义一个包含特定占位符的模板字符串。占位符可以是固定的标记,如{name},或者使用更复杂的模板语法,如{{ name }}。 准备数据:准备需要填充到模板中的数据。这些数据可以是变量、字典或其他数据...

    基于Python Django框架的简易后台服务模板源码

    项目概述:本简易后台服务模板基于Python的Django框架开发,共包含40个文件,主要包括19个Python源码文件(.py),15...此模板旨在为开发者提供一个快速搭建基于Django的后台服务的简易模板,方便进行项目拓展与维护。

    Python 实现一个剪刀石头布游戏

    Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀石头布游戏 Python 实现一个剪刀...

    基于Django开发的简易网页小游戏python源码(课程作业).zip

    【资源说明】基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小游戏python源码(课程作业).zip基于Django开发的简易网页小...

    Python写简单的拼图小游戏完整项目

    在Python编程领域,创建一个拼图小游戏是一个经典且有趣的实践项目,尤其适合初学者提升编程技能。本项目利用Python的图形用户界面(GUI)库,如Tkinter或Pygame,来实现一个交互式的拼图游戏。下面将详细介绍这个...

    用Python编了一个简易马里奥小游戏

    在本项目中,我们探索了如何使用Python编程语言创建一个简易版的马里奥小游戏。这个小游戏虽然简单,但它展示了Python在游戏开发中的潜力,并帮助初学者了解游戏编程的基本概念。 1. **Python编程基础**:Python是...

    Python-一个方便强大的excel模板引擎基于python3

    在处理Excel文件时,Python提供了许多库,其中就包括我们今天要讨论的"Python-一个方便强大的excel模板引擎"。这个模板引擎是专门为Python3设计的,允许用户通过简单的编程方式来创建和操作复杂的Excel模板。 Excel...

    python flask开发模板

    python flask框架开发模板,配置了数据库迁移(migrate) 日志logger 等 启动:python runserver.py 数据库迁移 :python manage.py db init

    Python简易飞机大战游戏

    在本项目中,"Python简易飞机大战游戏"是一款利用Python编程语言和Pygame库开发的小型游戏。Pygame是Python中一个广泛使用的模块,专为创建2D游戏和多媒体应用程序而设计。它提供了丰富的功能,包括图形绘制、事件...

    Python实战示例 简易时钟.zip

    Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟Python实战简易时钟...

    pythonGame小游戏代码+python课程设计代码

    这些代码实例为Python初学者提供了一个很好的学习平台,可以帮助他们理解和掌握Python在游戏开发中的实际应用,同时也锻炼了他们的逻辑思维和问题解决能力。通过亲手实践这些代码,不仅可以增强编程技能,还能享受...

    Python程序设计报告(大作业)-模板1

    为了记录用户的输入和正确率,我们可以创建一个计数器,每当用户猜对一个字母,计数器加一。最后,当用户选择结束游戏时,根据计数器和总单词数量计算正确率,并输出鼓励语句。 在Python中,文件操作可以使用内置的...

    python游戏项目脚本大全.zip

    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实现

    标题中的“24点游戏-Python实现”是指利用Python编程语言设计的一个数学益智游戏——24点。这个游戏的目标是从四张扑克牌中,通过加、减、乘、除及括号的操作,使得运算结果等于24。这个过程锻炼了玩家的逻辑思维和...

    简易版推箱子游戏Python语言

    2. **Pygame或自定义图形库**:虽然没有明确提到使用Pygame,但为了在屏幕上显示游戏界面和处理用户输入,开发者可能使用了Pygame库,这是一个Python库,专门用于开发2D游戏。如果开发者选择自定义图形库,他们可能...

    一个简单的贪吃蛇游戏的完整 Python 代码

    python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python贪吃蛇完整代码,一个简单的贪吃蛇游戏的完整 Python 代码; python...

    Python小游戏(我自己写的)

    Pygame是Python的一个模块集合,提供了创建游戏所需的基本功能,如图形绘制、事件处理、音频播放等。 【pygame】是Python中的一个开源库,它建立在SDL(Simple DirectMedia Layer)之上,为Python提供了跨平台的...

    python生成docx文档从模板

    接下来,我们将讨论如何创建一个模板并使用该模板生成docx文档。模板通常包含占位符,这些占位符将在运行时被动态数据替换。例如,`&lt;%tr for column in tbl.columns%&gt;`是一个可能的模板表达式,它可能会在循环中处理...

Global site tag (gtag.js) - Google Analytics