简单的贪吃蛇游戏代码_python 贪吃蛇

简单的贪吃蛇游戏代码_python 贪吃蛇Python贪吃蛇游戏编写代码来源:中文源码网浏览:次日期:2018年9月2日【下载文档:Python贪吃蛇游戏编写代码.txt】(友情提示:右键点上行txt文档名->目标另存为)Python贪吃蛇游戏编写代码最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法。由于…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Python贪吃蛇游戏编写代码

来源:中文源码网    浏览: 次    日期:2018年9月2日

【下载文档:  Python贪吃蛇游戏编写代码.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

Python贪吃蛇游戏编写代码 最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间找不到别的,就先做个贪吃蛇来练练简单的语法。

由于Python监听键盘很麻烦,没有C语言的kbhit(),所以这条贪吃蛇不会自己动,运行效果如下:要求:用#表示边框,用*表示食物,o表示蛇的身体,O表示蛇头,使用wsad来移动

Python版本:3.6.1

系统环境:Win10

类:

board:棋盘,也就是游戏区域

snake:贪吃蛇,通过记录身体每个点来记录蛇的状态

game:游戏类

本来还想要个food类的,但是food只需要一个坐标,和一个新建,所以干脆使用list来保存坐标,新建food放在game里面,从逻辑上也没有太大问题

源码:

# Write By Guobao

# 2017/4//7

#

# 贪吃蛇

# 用#做边界,*做食物,o做身体和头部

# python 3.6.1import copy

import random

import os

import msvcrt# the board class, used to put everything

class board: __points =[] def __init__(self):

self.__points.clear()

for i in range(22):

line = []

if i == 0 or i == 21:

for j in range(22):

line.append(‘#’)

else:

line.append(‘#’)

for j in range(20):

line.append(‘ ‘)

line.append(‘#’)

self.__points.append(line) def getPoint(self, location):

return self.__points[location[0]][location[1]] def clear(self):

self.__points.clear()

for i in range(22):

line = []

if i == 0 or i == 21:

for j in range(22):

line.append(‘#’)

else:

line.append(‘#’)

for j in range(20):

line.append(‘ ‘)

line.append(‘#’)

self.__points.append(line) def put_snake(self, snake_locations):

# clear the board

self.clear() # put the snake points

for x in snake_locations:

self.__points[x[0]][x[1]] = ‘o’ # the head

x = snake_locations[len(snake_locations) – 1]

self.__points[x[0]][x[1]] = ‘O’ def put_food(self, food_location):

self.__points[food_location[0]][food_location[1]] = ‘*’ def show(self):

os.system(“cls”)

for i in range(22):

for j in range(22):

print(self.__points[i][j], end=”)

print()# the snake class

class snake:

__points = [] def __init__(self):

for i in range(1, 6):

self.__points.append([1, i]) def getPoints(self):

return self.__points # move to the next position

# give the next head

def move(self, next_head):

self.__points.pop(0)

self.__points.append(next_head) # eat the food

# give the next head

def eat(self, next_head):

self.__points.append(next_head) # calc the next state

# and return the direction

def next_head(self, direction=’default’): # need to change the value, so copy it

head = copy.deepcopy(self.__points[len(self.__points) – 1]) # calc the “default” direction

if direction == ‘default’:

neck = self.__points[len(self.__points) – 2]

if neck[0] > head[0]:

direction = ‘up’

elif neck[0] < head[0]:

direction = ‘down’

elif neck[1] > head[1]:

direction = ‘left’

elif neck[1] < head[1]:

direction = ‘right’ if direction == ‘up’:

head[0] = head[0] – 1

elif direction == ‘down’:

head[0] = head[0] + 1

elif direction == ‘left’:

head[1] = head[1] – 1

elif direction == ‘right’:

head[1] = head[1] + 1

return head# the game

class game: board = board()

snake = snake()

food = []

count = 0 def __init__(self):

self.new_food()

self.board.clear()

self.board.put_snake(self.snake.getPoints())

self.board.put_food(self.food) def new_food(self):

while 1:

line = random.randint(1, 20)

column = random.randint(1, 20)

if self.board.getPoint([column, line]) == ‘ ‘:

self.food = [column, line]

return def show(self):

self.board.clear()

self.board.put_snake(self.snake.getPoints())

self.board.put_food(self.food)

self.board.show()

def run(self):

self.board.show() # the ‘w a s d’ are the directions

operation_dict = {b’w’: ‘up’, b’W’: ‘up’, b’s’: ‘down’, b’S’: ‘down’, b’a’: ‘left’, b’A’: ‘left’, b’d’: ‘right’, b’D’: ‘right’}

op = msvcrt.getch() while op != b’q’:

if op not in operation_dict:

op = msvcrt.getch()

else:

new_head = self.snake.next_head(operation_dict[op]) # get the food

if self.board.getPoint(new_head) == ‘*’:

self.snake.eat(new_head)

self.count = self.count + 1

if self.count >= 15:

self.show()

print(“Good Job”)

break

else:

self.new_food()

self.show() # 反向一Q日神仙

elif new_head == self.snake.getPoints()[len(self.snake.getPoints()) – 2]:

pass # rush the wall

elif self.board.getPoint(new_head) == ‘#’ or self.board.getPoint(new_head) == ‘o’:

print(‘GG’)

break # normal move

else:

self.snake.move(new_head)

self.show()

op = msvcrt.getch()game().run()笔记:

1.Python 没有Switch case语句,可以利用dirt来实现

2.Python的=号是复制,复制引用,深复制需要使用copy的deepcopy()函数来实现

3.即使在成员函数内,也需要使用self来访问成员变量,这和C++、JAVA很不一样

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持中文源码网。

亲,试试微信扫码分享本页! *^_^*

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169540.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言文件读写操作(详解)

    C语言文件读写操作(详解)数据流和缓冲区是什么?文件类型和文件存取方式都有啥?数据流就C程序而言,从程序移进,移出字节,这种字节流就叫做流。程序与数据的交互是以流的形式进行的。进行C语言文件的读写时,都会先进行“打开文件”操作,这个操作就是在打开数据流,而“关闭文件”操作就是关闭数据流。缓冲区在程序执行时,所提供的额外内存,可用来暂时存放准备执行的数据。它的设置是为了提高存取效率,因为内存的存取速度比磁盘驱动器快得多。当使用标准I/O函数(包含在头文件stdio.h中)时,系统会自动设置缓冲区,并通过数据流来读写文件。当

    2022年6月2日
    166
  • Linux配置redis开机启动(CentOS 7)

    Linux配置redis开机启动(CentOS 7)

    2021年10月27日
    53
  • RSA加密算法Python实现

    RSA加密算法Python实现RSA加密算法Python实现RSA加密算法是目前使用最广泛的加密方式,具体流程见RSA加密算法之前想过用C语言实现,但是由于C语言对整型的位宽有要求,RSA加密算法中需要使用的数字大小远远超出C语言中longlongint的最大值,最近学习了Python之后,发现Python没有这一要求,可以较容易的实现。以下模拟中只能输入数字,因为实际过程中所有文字信息都被转化成Unicode数字码传输,代码中没有做转化这一步,只模拟算法。fromrandomimportrandintfromd

    2022年5月28日
    36
  • OpenCV论道:为什么我的伽马校正函数只有一行?[通俗易懂]

    OpenCV论道:为什么我的伽马校正函数只有一行?[通俗易懂]最近在用OpenCV识别棋盘棋子,基本的思路是这样的:先转灰度,再做高斯模糊和二值化,此时棋盘格上有的有棋子,有的无棋子;通过迭代腐蚀,消去棋子,再迭代膨胀回来,就得到了一个纯净的棋盘;识别棋盘,标定位置,对原图做透视变换、仿射变换,得到矩形棋盘;利用霍夫圆形检测或轮廓检测取得棋子;借助于机器学习识别棋子,最终得到对弈局面。

    2022年9月16日
    4
  • 漫画:这个靠脸吃饭的男人,太可怕了!

    今天推荐画风唯美的漫画 《重生之星光璀璨》 作为歌坛巨星的阮熙冰被双胞胎妹妹 和未婚夫设计杀害,阴差阳错重生 到了一个小服务生的身上。 她靠着努力与演技重返娱乐圈, 誓要夺回曾属于…

    2021年6月22日
    113
  • phpstrom2021激活码(在线激活)

    phpstrom2021激活码(在线激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号