用python做一个简单的游戏,用python写一个小游戏

Posted 阳阳2013哈哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python做一个简单的游戏,用python写一个小游戏相关的知识,希望对你有一定的参考价值。

大家好,本文将围绕如何用python做一个简单的小游戏展开说明,python编写的入门简单小游戏是一个很多人都想弄明白的事情,想搞清楚用python做一个简单的游戏需要先了解以下几个事情。

1、Python游戏开发,Python实现贪吃蛇小游戏与吃豆豆 附带源码

Python版本: 3.6.4

相关模块:

pygame模块;

以及一些Python自带的模块。

安装Python并添加到环境变量,pip安装需要的相关模块即可。

贪吃蛇的 游戏 规则应该不需要我多做介绍了吧T_T。写个贪吃蛇 游戏 其实还是很简单的。首先,我们进行一下 游戏 初始化:

然后定义一个贪吃蛇类:

其中head_coord用来记录蛇头所在位置,而tail_coords是一个二维数组,用来记录所有蛇身的位置。一开始,贪吃蛇长为3,并且位置是随机生成的。用户通过 键来控制贪吃蛇的行动:

需要注意的是,贪吃蛇不能180 大拐弯,只能90 地拐弯。例如正在向左行动的贪吃蛇不能瞬间变成向右行动。具体而言,代码实现如下:

然后,我们需要随机生成一个食物,且需要保证该食物的位置不与贪吃蛇的位置相同:

在更新贪吃蛇的时候,如果它吃到了食物,则蛇身长加一,否则只是简单的按照给定的方向行动而不改变蛇身长度:

同时,当贪吃蛇吃到食物时,需要重新生成一个新的食物:

最后,当贪吃蛇碰到墙壁或者蛇头碰到蛇身时, 游戏 结束:

并显示一下 游戏 结束界面:

玩家通过 键控制 游戏 的主角吃豆人吃掉藏在迷宫内的所有豆子,并且不能被鬼魂抓到。

若能顺利吃完迷宫内的所有豆子并且不被鬼魂抓到,则 游戏 胜利,否则 游戏 失败。

逐步实现:

Step1:定义 游戏 精灵类

首先,让我们先来明确一下该 游戏 需要哪些 游戏 精灵类。

① 墙类

② 食物类(即豆豆)

③ 角色类

角色类包括吃豆人和鬼魂,鬼魂由电脑控制其运动轨迹,吃豆人由玩家控制其运动轨迹。

显然,其均需具备更新角色位置和改变角色运动方向的能力,其源代码如下:

Step2:设计 游戏 地图

利用Step1中定义的 游戏 精灵类,我们就可以开始设计 游戏 地图了。由于时间有限,我只写了一个关卡的 游戏 地图,有兴趣的小伙伴可以在此基础上进行扩展(在我的源代码基础上进行扩展是很方便滴~)。 游戏 地图的设计包括以下四方面内容:

① 创建墙

② 创建门(一开始关幽灵用的)

image.gif

③ 创建角色

④ 创建食物

因为食物不能和墙、门以及角色的位置重叠,所以为了方便设计 游戏 地图,要先创建完墙、门以及角色后再创建食物:

Step3:设计 游戏 主循环

接下来开始设计 游戏 主循环。首先是初始化:

然后定义主函数:

其中startLevelGame函数用于开始某一关 游戏 ,其源代码如下:

showText函数用于在 游戏 结束或关卡切换时在 游戏 界面中显示提示性文字,其源代码如下:

2、python入门可以做的小游戏

1、Python入门拼图小游戏
简单介绍:
将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状python写一个简单的小游戏
2、Python入门推箱子小游戏
简单介绍:
这是来自日本的一个经典游戏,在狭小的仓库中,要求把木箱放到指定的位置,如果不小心就可能出现箱子无法移动或者通道被堵的情况,所以,如何巧妙利用有限的空间和通道,合理安排移动顺序,就成了这个游戏能否通关的关键。
3、Python入门小游戏之外星人入侵
简单介绍:
玩家可以通过鼠标控制飞船的移动和射击,如果能在敌人达到游戏界面低端之前消灭所有敌人,则游戏胜利,否则游戏失败。
4、Python入门小游戏之吃豆子
简单介绍:
通过键盘方向键,控制游戏的人物吃豆人,吃掉藏在迷宫内的所有豆子,并且不能被敌人抓到。
5、Python入门小游戏之宝石消消乐
简单介绍:
玩家通过鼠标交换相邻的拼图,若交换后,在水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分。
6、Python入门小游戏之乒乓球对战
简单介绍:
中间是球网,玩家通过上下键移动球拍,并且这个游戏是可以两个人玩的哦。
7、还有其他四个游戏
它们是:炸弹人小游戏、逃出迷宫、飞扬的小鸟、五子棋

3、如何用python程序编写一个循环五次的小游戏,每次随机产生两个数字让用户计算这两个数的?

如果这是VB的程序,那么可以用如下的得到两个1~10的整数:

x=Int(Rnd*10)+1。

y=Int(Rnd*10)+1。

再加上循环for i=1 to 5可以。

#include <stdio.h>。

#include <stdlib.h> bai/* 随机库函数 */。

#include <time.h> /* 时间库函数 */。

int count=0, ok=0; /* count表示回答次数, ok表示回答正确次数 */。

/* 加法函数 */。

int add(int x,int y)。

优点

简单:Python是一种代表简单主义思想的语言。阅读一个良好的Python程序就感觉像是在读英语一样。它使你能够专注于解决问题而不是去搞明白语言本身。

易学:Python极其容易上手,因为Python有极其简单的说明文档。

易读、易维护:风格清晰划一、强制缩进。

4、帮忙用python写个小游戏

#!/usr/bin/env python
# -*- encoding:utf-8 -*-
Integral = 0
#noError = 1
print "欢迎来到厨艺大比拼!".center(60)
#可以自己创建这个函数,我这统一使用的这一个函数,然后下面修改调用
def Choice(Each_level):
    if Each_level == "001":return 10   #选择001得10分
    elif Each_level == "002":return 5  #选择002得5分
    elif Each_level == "003":return 1  #选择003得1分
    else:return 0
while True:
    file1=raw_input("""请选择你的食材:
001:黄瓜
002:香蕉
003:榴莲
""")
    if not Choice(file1):continue
    Integral += Choice(file1)
    file1=raw_input("""请选择你的调料:
001:酱油
002:醋
003:盐
""")
    if not Choice(file1):continue
    Integral += Choice(file1)
    file1=raw_input("""请选择你的烹饪方式:
001:蒸
002:炒
003:油炸
""")
    if not Choice(file1):continue
    Integral += Choice(file1)                                                                      
    file1=raw_input("""请选择你的烹饪时间:                                        
001:30分钟                                                                        
002:10分钟                                                                        
003:12小时                                                                        
""")                                                                                               
    if not Choice(file1):continue                                                 
    Integral += Choice(file1)                                                     
    break                                                                                                                                                           
print "你的菜最后得分为:",Integral

下面是输出结果

用 Python Turtle 模块做小游戏 - 贪吃蛇

贪吃蛇是Nokia手机上面的经典游戏,我们可以利用Turle模块实现一个自己的贪吃蛇游戏。

效果图如下所示
技术图片

贪吃蛇的程序里面,简单的说,有几个问题需要解决:

  1. 初始化一个蛇出来
  2. 蛇可以移动
  3. 我们可以控制蛇上下左右跑
  4. 生成随机的食物
  5. 蛇可以吃食物
  6. 蛇可以长个子
  7. 蛇撞墙或者撞到自己会死掉
  8. 显示相关的分数和信息

上面几个问题一个个解决了,最后的程序也就搞定了。
解决方案:

  1. 初始化蛇的原理其实和前面的乌龟赛跑相似,我们一次性的实例化3个方块出来,调整好坐标放在一起就好了
  2. 蛇怎么移动呢?初始化以后,他是三个放在一起的方块,我们可以把这些方块放在一个列表里面,第一个自然是蛇头,最后一个是蛇尾,每次移动的时候,从蛇尾往前循环,每个方块都移到上一个方块的坐标,蛇头前面没有坐标了,那就默认往前跑,这样的效果就是一条蛇往前冲了
  3. 这个通过screen的键盘监听事件就解决了,每次触发函数的时候,里面调整一下蛇头的角度就解决了
  4. 随机的食物可以直接继承我们的Turtle 类,初始化颜色,大小之后,可以随机地指定坐标生成
  5. 判断蛇头和食物的距离,因为我们的食物和蛇头本身是有大小设定的,因此我们可以通过distance这个函数来判断,如果小于某个坐标长度,就算接触了
  6. 蛇长个子和蛇初始化的操作基本相似,新建一个实例,调整坐标为蛇尾,加入列表即可
  7. 通过判断蛇头的坐标,看看有没有到边界坐标,或者靠近他自己的身子坐标,就知道是否撞了
  8. 显示内容可以通过 turtle.write这个函数 实现,我们只需要调整字体和坐标就好了

除了上面几个问题,还有一个需要注意点就是,需要关闭默认的动画效果,不然身子的每一个方块的移动慢动作他都会显示出来,看起来就像一个诡异的毛毛虫在移动。解决方法是关闭动画效果,然后每次在所有的方格都移动之后,我们手动的刷新一下界面,这样连续效果看起来就像是一条整蛇在动。

说了这么多,最后看看源代码吧。

就4个py文件,main文件里面调用其他三个类的文件

技术图片

main.py

from turtle import Screen
import time
from snake import Snake
from food import Food
from scoreboard import Scoreboard

#初始化画布,设置长度,宽度和标题
screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.title("Snake Game")

#tracer设置为0的作用是关闭动画效果,我们通过timer设置延时,然后通过update手动刷新界面,否则默认的动画效果看起来就是每个方块的移动效果
#想象一下GIF或者CRT显示器的原理,多个画面连续刷新,看起来就像动起来一样
screen.tracer(0)

#实例化三个对象
snake_segments = Snake()
food = Food()
scoreboard = Scoreboard()

#监听上下左右的键盘操作
screen.listen()
screen.onkey(snake_segments.up, "Up")
screen.onkey(snake_segments.down, "Down")
screen.onkey(snake_segments.left, "Left")
screen.onkey(snake_segments.right, "Right")

#布尔值判断是否结束游戏
game_is_on = True
while game_is_on:

#每次停顿0.1秒后刷新一下界面,然后蛇移动一下
    screen.update()
    time.sleep(0.1)
    snake_segments.move()

# 如果蛇头碰见食物了,那么食物刷新随机生成一下,分数加一,蛇身长度加一
    if snake_segments.head.distance(food) < 15:
        print("yum yum yum")
        food.refresh()
        scoreboard.addscore()
        snake_segments.add_segment()

# 如果蛇头撞墙了,那么Game over

    if snake_segments.head.xcor() > 280 or snake_segments.head.xcor() < -280 or snake_segments.head.ycor() > 280 or snake_segments.head.ycor() < -280:
        game_is_on = False
        scoreboard.gameover()

# 如果蛇头撞到身子了,那么Game over,注意列表是从第二节开始的,排除蛇头

    for seg in snake_segments.segments[1:]:

        if snake_segments.head.distance(seg) < 10:
            game_is_on = False
            scoreboard.gameover()

screen.exitonclick()

scoreboard.py

from turtle import Turtle
ALIGNMENT="center"
FONT=("Arial",20,"normal")

#显示分数和Game over等标记

class Scoreboard(Turtle):
    def __init__(self):
        super().__init__()
        self.color(‘white‘)
        self.penup()
        self.hideturtle()
        self.score=0
        self.updatescore()

    def updatescore(self):
        self.goto(0, 270)
        self.write(f"SCORE = {self.score}",True, align=ALIGNMENT,font=FONT)
        self.goto(0,250)
#        self.write("-"*300,True, align=ALIGNMENT,font=FONT)

    def addscore(self):
        self.score+=1
        self.clear()
        self.updatescore()

    def gameover(self):
        #self.clear()
        self.goto(0,0)
        self.write(f"GAME OVER",True, align=ALIGNMENT, font=FONT)

snake.py


from turtle import Turtle

MOVE_DISTANCE=20
class Snake:

    #初始化的时候,蛇有三节,一字排开,放到一个列表里
    def __init__(self):
        self.segments = []
        for i in range(3):
            seg = Turtle(shape="square")
            seg.color(‘white‘)
            seg.penup()
            seg.goto(0 - 20 * i, 0)
            self.segments.append(seg)
        self.head=self.segments[0]

    #这个是最核心的部分,每次移动的时候,从蛇尾巴往前循环,每个方块往上一个方块的坐标移动,蛇头自动往前跑

    def move(self):
        for seg_num in range(len(self.segments) - 1, 0, -1):
            new_x = self.segments[seg_num - 1].xcor()
            new_y = self.segments[seg_num - 1].ycor()
            self.segments[seg_num].goto(new_x, new_y)
        self.segments[0].forward(MOVE_DISTANCE)

    #蛇头往上跑

    def up(self):
        if self.head.heading() !=270:
            self.head.setheading(to_angle=90)
    #蛇头往下跑

    def down(self):

        if self.head.heading() != 90:
            self.head.setheading(to_angle=270)
    #蛇头往左跑

    def left(self):
        if self.head.heading() !=0:
            self.head.setheading(to_angle=180)
    #蛇头往右跑

    def right(self):
        if self.head.heading() !=180:
            self.head.setheading(to_angle=0)

    #蛇的身子加1,原理是新创建一个实例,然后放到蛇尾巴的位置

    def add_segment(self):
        seg = Turtle(shape="square")
        seg.color(‘white‘)
        seg.penup()
        tail = self.segments[-1]
        seg.goto(tail.xcor(),tail.ycor())
        self.segments.append(seg)

food.py

from turtle import  Turtle
import random

class Food(Turtle):
    def __init__(self):
        super().__init__()
        self.shape(‘circle‘)
        self.penup()
        #self.shapesize(stretch_len=0.5,stretch_wid=0.5)
        self.color(‘blue‘)
        self.speed(‘fastest‘)
        # self.goto(random.randint(-280,280),random.randint(-280,280))
        self.refresh()

    def refresh(self):
        self.goto(random.randint(-280, 280), random.randint(-280, 260))

很简单吧

以上是关于用python做一个简单的游戏,用python写一个小游戏的主要内容,如果未能解决你的问题,请参考以下文章

求帮忙写一python的毕业设计,价钱可以商量的

用python做一个简单的pong游戏

一日一技:用Python做游戏有多简单

过7游戏用python怎么写

一日一技:用Python做游戏有多简单

用python入门知识做推箱子游戏,若能打过第三关,则可以学会编程