Python制作AI贪吃蛇,很多很多细节、思路都写下来了!

本文详细介绍了如何使用Python实现AI贪吃蛇,包括智能模式下的电脑自行对战和人机对战。通过A*算法,实现了蛇的自动寻路,避免撞墙和自我碰撞。同时讨论了在Python环境下配置Curses库的步骤,以及代码中关键函数的作用。文章还提到了一些可能遇到的问题及解决方案,如窗口大小调整和变量管理。读者可以通过理解这些思路和代码,进一步完善和扩展游戏功能。
摘要由CSDN通过智能技术生成

前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样)

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771

实现效果:

具体功能:

1.智能模式:电脑自己玩(自己吃食物)

2.人机对战:电脑和人操作(在上步的基础上加一个键盘控制的贪吃蛇即可)

实现环境:

Pycharm + Python3.6 + Curses + Win10

具体过程:

一:配置环境:

Curses: 参考链接 (Cp后面代表本地Python环境,别下错了)

( Stackoverflow 真的是个非常好的地方)

二:

1.灵感来源+参考链接:

http://www.hawstein.com/posts/snake-ai.html (Chrome有时候打不开,Firefox可以打开)

2.算法思路:

A*算法: https://www.cnblogs.com/21207-iHome/p/6048969.html (本人之前接触过,当时讲课老师说是自动寻路算法,我感觉和BFS+DFS一样,结果没想到居然是A*算法)

BFS+DFS(略)

第一步是能制作一个 基本的贪吃蛇 ,熟悉Curses的相关环境(最好别对蛇和食物使用特殊字符,在windows环境下会导致像素延迟,非常丑)

 

#curses官方手册:https://docs.python.org/3.5/library/curses.html#module-curses
#curses参考手册:https://blog.csdn.net/chenxiaohua/article/details/2099304

具体思路:

熟悉Curses中相关指令后基本就没什么了, 保证按的下一个键不导致蛇死亡,保证蛇吃食物后食物不在蛇身上,保证蛇碰到自己和边框就死亡,如果按其他键,会导致头被插入2次,从而让蛇死亡。(具体见代码分析)

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 # @Time : 2018/11/5 17:08
 4 # @Author : Empirefree
 5 # @File : 贪吃蛇-01.py
 6 # @Software: PyCharm Community Edition
 7
 8 #curses官方手册:https://docs.python.org/3.5/library/curses.html#module-curses
 9 #curses参考手册:https://blog.csdn.net/chenxiaohua/article/details/2099304
 10
 11 # 基本思路:while循环,让蛇一直右走(直到按键,如果按了其他键就会导致蛇头被重复插入1次到snake中,
 12 # 继而第二次循环就会退出),蛇是每次自动增长,但是每次没吃到食物就会pop尾部(snake放在dict中,类似链表),按键检查就是只能按方向键
 13 # 按方向键也存在判别是否出错(按了up后又按down),然后对于死亡情况就是碰到周围和自己
 14
 15 # 1.蛇的移动和吃食物后的变化
 16 # 2.按键:按其他键和方向键
 17 # 3.死亡判断
 18
 19 import curses
 20 import random
 21
 22 # 开启curses
 23 def Init_Curse():
 24 global s
 25 s = curses.initscr()
 26 curses.curs_set(0) #能见度光标,写错了哇
 27 curses.noecho()
 28 curses.cbreak() #立即得到响应
 29 s.keypad(True) #特殊处理键位,返回KEY_LEFT
 30
 31 #关闭并回到终端
 32 def Exit_Curse():
 33 curses.echo()
 34 curses.nocbreak()
 35 s.keypad(False)
 36 curses.endwin()
 37
 38 def Start_Game():
 39 # 窗口化操作
 40 y, x = s.getmaxyx() # curses中是y,x
 41 w = curses.newwin(y, x, 0, 0)
 42 w.keypad(1)
 43 w.timeout(100)
 44
 45 # 初始化蛇的位置,并用dict存储
 46 snake_x = int(x / 4)
 47 snake_y = int(y / 2)
 48 snake = [[snake_y, snake_x], [snake_y, snake_x - 1], [snake_y, snake_x - 2]]
 49
 50 # 初始化食物
 51 food_pos = [int(y / 2), int(x / 2)]
 52 w.addch(food_pos[0], food_pos[1], '@') # 用@显示食物字元
 53
 54 key = curses.KEY_RIGHT # 得到右方向键
 55
 56 # 开始,为什么我感觉True比1看的爽一些
 57 while True:
 58 next_key = w.getch() # 等待输入,传回整数
 59 print(next_key, 'QAQ')
 60 # 防止Error
 61 if next_key != -1:
 62 if key == curses.KEY_RIGHT and next_key !&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值