心理学实验学习pygame编程-贪吃蛇(1)

 

        神经科学/心理学实验经常用到一些电脑的模拟,例如检查注意力的持续注意测试(Continuous Perfomance Task,CPT),python + pygame是实现这些实验比较好的选择,下面几章将用pygame实现简单的游戏贪吃蛇来了解pygame的使用。之后还会介绍一些神经认知实验的实现。

        本章首先实现的是将一条简单的蛇显示出来。用像素为10×10蓝色方块表示蛇身,三角形表示蛇头。

215dfd8398ae50470616966deebc3271dd7.jpg

        把它分成几个模块:(1)main.py:初始化窗口,游戏主循环。(2)snake.py:绘制并处理蛇的动作。(3)settings.py:主要的设置。(4)game_functions.py:相应键盘动作,处理事件。

# -*- coding: utf-8 -*-
# date: 2019/5/17
# author: DennisLu

# import modules
import pygame

from settings import Settings
from snake import Snake
import game_functions as gf

def run_game():
    # initial game
    pygame.init()

    # create a screen
    ai_settings = Settings()
    screen = pygame.display.set_mode(ai_settings.screen_dim)
    pygame.display.set_caption("snake")

    # create snake
    snake = Snake(ai_settings, screen, clock)

    # game loop
    while(True):
        # listen to keyboard events
        gf.check_events(ai_settings, screen, snake)

        # update screen
        gf.update_screen(ai_settings, screen, snake)

if __name__ == '__main__':
    run_game()

pygame.display.set_mode(resolution=(0,0), flags=0, depth=0) -> Surface  输入 resolution,返回resolution大小的窗口。  

pygame.display.set_caption(str) -> none 设置标题。

# -*- coding: utf-8 -*-
# date: 2019/5/18
# author: DennisLu

# import modules
import pygame

from settings import Settings

class Snake():
    """
    class of a snake:
    snake_head: use to local a snake
    """
    def __init__(self, ai_settings, screen):
        self.ai_settings = ai_settings
        self.screen = screen

        # set snake direction up:0, right:90 down:180 left: 270
        self.direction = self.ai_settings.direction

        self.snake_len = self.ai_settings.ini_snake_len
        self.snake_body = [(self.ai_settings.snake_head_x + 10 * i, self.ai_settings.snake_head_y) for i in range(1, self.snake_len) ]

        # load snake images
        self.head_row_image = pygame.image.load('images/snake_head.png')
        self.body_image = pygame.image.load('images/snake_body.png')

        # snake body moves with its head
        self.head_rect = self.head_row_image.get_rect()
        self.body_rect = self.body_image.get_rect()

        # position the snake image
        self.head_rect.x, self.head_rect.y = self.ai_settings.snake_head_x, self.ai_settings.snake_head_y


    def blitme(self):
        self.head_image = pygame.transform.rotate(self.head_row_image, self.direction)
        self.screen.blit(self.head_image, self.head_rect)
        for i in self.snake_body:
            self.body_rect.x, self.body_rect.y = i[0], i[1]
            self.screen.blit(self.body_image, self.body_rect)

pygame.image.load(str) -> Surface 读取图片,创建一个pygame Surface可以简单理解成pygame的图像元素。

通过蛇的头部对蛇进行定位,创建一个数组来记录蛇身。

# -*- coding: utf-8 -*-
# date: 2019/5/18
# author: DennisLu

# import module
import pygame

import sys
from time import sleep


def check_events(ai_settings, screen, snake):
    for event in pygame.event.get():
        if(event.type == pygame.QUIT):
            pygame.quit()
            sys.exit()

def update_screen(ai_settings, screen, snake):
    screen.fill(ai_settings.bg_color)
    snake.blitme()
    pygame.display.flip()

 pygame.event.get():从输入事件队列中按顺序取出事件。

pygame.Surface.fill():给平面元素填充颜色

# -*- coding: utf-8 -*-
# date: 2019/5/11
# author: DennisLu

class Settings():
    """A class to store all settings for snake"""
    def __init__(self):
        # screen setings
        self.screen_width = 600
        self.screen_height = 400
        self.screen_dim = (600, 400)
        self.bg_color = (200, 200, 200)

        # snake settings
        self.snake_head_x, self.snake_head_y = 140, 140
        self.direction = 90
        self.ini_snake_len = 4

 

转载于:https://my.oschina.net/avenger222/blog/3057910

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值