`

一个简易的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实现模板打印

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

    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-一个方便强大的excel模板引擎基于python3

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

    Python简易飞机大战游戏

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

    Python实战示例 简易时钟.zip

    Python实战简易时钟Python实战简易时钟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 使用Python制作简易数字累加器 Python源码Python 使用...

    简易版推箱子游戏Python语言

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

    python飞机简易版

    【Python飞机游戏简易版】是基于Python编程语言开发的一款简单而有趣的飞行射击游戏。这个案例旨在教授初学者如何利用Python进行游戏开发,同时也展示了Python在图形界面和游戏编程中的应用。"良心"的描述可能意味着...

    一个简单的贪吃蛇游戏的完整 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;`是一个可能的模板表达式,它可能会在循环中处理...

    Python 游戏源码 - pygame-games(13个) Python源码

    Python 游戏源码 - pygame_games(13个) Python源码Python 游戏源码 - pygame_games(13个) Python源码Python 游戏源码 - pygame_games(13个) Python源码Python 游戏源码 - pygame_games(13个) Python源码...

    经典小游戏20多个python源码下载

    经典小游戏20多个python源码下载,用python 中pygame模块开发的小游戏。 1.植物大战僵尸 2.小黄狗跑酷 3.飞机大战 4.外星人与飞船 5.推箱子 6.外星人大战 7.汤姆猫 8.忍者奔跑 9.绘制满天星 10.扫雷 11.数字消除 12....

    一个游戏防沉迷程序(Python)

    一个使用Python制作的游戏防沉迷程序源代码,若超出允许游戏的时间段及时长,则结束游戏进程以达到防沉迷效果,注释中包含转换为.exe文件的方法

    fishdome_python魔兽钓鱼模板匹配测试代码_

    本案例中的"fishdome_python魔兽钓鱼模板匹配测试代码_"是一个Python项目,它主要用于在魔兽世界游戏中实现自动钓鱼的功能。通过模板匹配,程序可以识别游戏界面中的特定元素,如鱼鳔,从而触发相应的操作,比如点击...

    扑克小游戏python代码

    游戏规则: 1.每局游戏开始时会给每位玩家随机分发两张牌; 2.两张牌加起来的点数最大者获胜。 每次洗牌前先按顺序建立牌堆,然后按游戏规则循环进行。 代码内有详细注释。

Global site tag (gtag.js) - Google Analytics