zoukankan      html  css  js  c++  java
  • 用python+pygame写贪吃蛇小游戏

    因为python语法简单好上手,前两天在想能不能用python写个小游戏出来,就上网搜了一下发现了pygame这个写2D游戏的库。了解了两天再参考了一些资料就开始写贪吃蛇这个小游戏。 毕竟最开始的练手项目好像都是这个emmmmpython推荐廖雪峰的python3教程,pygame推荐目光博客的pygame教程,pygame是一个开发2D游戏的库。Python + Pygame 简单了解后就可以上手这个项目。

    总体思路:

    1、游戏开始信息显示

    2、地图的初始化

    3、蛇的初始化

    4、食物的随机出现

    5、实现简单的用户输入控制贪吃蛇的方向变化

    6、判断贪吃蛇是否吃到食物,如果吃到食物(头部坐标和食物坐标相同),蛇自身长度+1,同时随机出现新的食物。否则保持不变。

    7、判断蛇是是否碰到边界,如果碰到边界,弹出死亡信息和分数。

    (1) 游戏的整体定义:

    cell_size是贪吃蛇的大小,注意cell_size 要能被窗口大小被整除.

    地图的总体宽度:

    map_width = int(windows_width / cell_size)
    map_height = int(windows_height / cell_size)
    

      

    整体颜色和方向定义:

    white = (255, 255, 255)
    black = (0, 0, 0)
    gray = (230, 230, 230)
    dark_gray = (40, 40, 40)
    DARKGreen = (0, 155, 0)
    Green = (0, 255, 0)
    Red = (255, 0, 0)
    blue = (0, 0, 255)
    dark_blue =(0,0, 139)
     
     
    BG_COLOR = black #游戏背景颜色
     
    # 定义方向
    UP = 1
    DOWN = 2
    LEFT = 3
    RIGHT = 4
     
    HEAD = 0 #贪吃蛇头部下标
    

      

    主要函数:

    1.贪吃蛇的初始化:

    snake_coords = [{'x': startx, 'y': starty},  #初始贪吃蛇
                      {'x': startx - 1, 'y': starty},
                      {'x': startx - 2, 'y': starty}]
    

      

    2.画贪吃蛇:

    def draw_snake(screen, snake_coords):
    	for coord in snake_coords:
    		x = coord['x'] * cell_size
    		y = coord['y'] * cell_size
    		wormSegmentRect = pygame.Rect(x, y, cell_size, cell_size)
    		pygame.draw.rect(screen, dark_blue, wormSegmentRect)
    		wormInnerSegmentRect = pygame.Rect(                #蛇身子里面的第二层亮绿色
    			x + 4, y + 4, cell_size - 8, cell_size - 8)
    		pygame.draw.rect(screen, blue, wormInnerSegmentRect)
    

      

    3.移动贪吃蛇:

    def move_snake(direction, snake_coords):
        if direction == UP:
            newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] - 1}
        elif direction == DOWN:
            newHead = {'x': snake_coords[HEAD]['x'], 'y': snake_coords[HEAD]['y'] + 1}
        elif direction == LEFT:
            newHead = {'x': snake_coords[HEAD]['x'] - 1, 'y': snake_coords[HEAD]['y']}
        elif direction == RIGHT:
            newHead = {'x': snake_coords[HEAD]['x'] + 1, 'y': snake_coords[HEAD]['y']}
     
        snake_coords.insert(0, newHead)
    

      

    4.判断蛇是否死亡:

    def snake_is_alive(snake_coords):
    	tag = True
    	if snake_coords[HEAD]['x'] == -1 or snake_coords[HEAD]['x'] == map_width or snake_coords[HEAD]['y'] == -1 or 
    			snake_coords[HEAD]['y'] == map_height:
    		tag = False # 蛇碰壁啦
    	for snake_body in snake_coords[1:]:
    		if snake_body['x'] == snake_coords[HEAD]['x'] and snake_body['y'] == snake_coords[HEAD]['y']:
    			tag = False # 蛇碰到自己身体啦
    	return tag
    

      

    5.食物的初始化:

    def get_random_location():
    	return {'x': random.randint(0, map_width - 1), 'y': random.randint(0, map_height - 1)}
    

      

    6.判断蛇是否吃到食物:

    def snake_is_eat_food(snake_coords, food):  #如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。
    	if snake_coords[HEAD]['x'] == food['x'] and snake_coords[HEAD]['y'] == food['y']:
    		food['x'] = random.randint(0, map_width - 1)
    		food['y'] = random.randint(0, map_height - 1) # 实物位置重新设置
    	else:
    		del snake_coords[-1]  # 如果没有吃到实物, 就向前移动, 那么尾部一格删掉
    


    原文:https://blog.csdn.net/qq_40755486/article/details/89817137

  • 相关阅读:
    用react的ReactCSSTransitionGroup插件实现简单的弹幕动画
    composer安装yii2问题总结
    记阿里笔试经历
    JVM, JRE,JDK 的区别
    HTML
    Http协议
    操作系统和网络基础知识
    网络基础之网络协议
    计算机硬件知识
    计算机硬件历史
  • 原文地址:https://www.cnblogs.com/qbdj/p/11010716.html
Copyright © 2011-2022 走看看