当前位置: 首页>编程语言>正文

趣味益智游戏Python python趣味游戏编程

书籍:《PYTHON游戏编程入门》(More Python Programming for the Absolute Beginner)
本文为第二章后面的挑战题,欢迎交流


第二章

  • 第一题
  • 题目
  • 关于pygame.draw.ellipse函数
  • 代码
  • 结果
  • 第二题
  • 题目
  • 代码
  • 结果
  • 第三题
  • 题目
  • 代码
  • 结果


趣味益智游戏Python python趣味游戏编程,趣味益智游戏Python python趣味游戏编程_原代码,第1张

第一题

题目

使用本章的示例作为起点,编写一个程序来绘制一个椭圆,这是我们在本章中没有介绍的形状。

关于pygame.draw.ellipse函数

趣味益智游戏Python python趣味游戏编程,趣味益智游戏Python python趣味游戏编程_pygame_02,第2张

得到ellipse函数的定义:ellipse(Surface, color, Rect, width=0)第一个参数是要绘制的平面,第二个参数是绘制椭圆使用的颜色,第三个参数是目标椭圆对应的那个外框矩形,用矩形左上角顶点的坐标对和右下角顶点的坐标对组成,第四个参数是椭圆边的宽度。

代码

# ch2 Question1: Drawing Ellipse
# python 3.8.0
# pygame 1.9.6

import pygame
import sys
from pygame.locals import *
pygame.init()
screen_size = 1000,600
screen = pygame.display.set_mode(screen_size)
                    #   建立一个“画布”,名字为screen
pygame.display.set_caption("Draw the Ellipse")
                    #   设置窗口标题
                    
while True:
                    #   实现循环显示
    for event in pygame.event.get():
                    #   读取当前事件状态
        if event.type in (QUIT, KEYDOWN):
                    #   监听鼠标和键盘,点右上角的X或者长按键盘退出
            sys.exit()

    background_colour = 0,0,0
    screen.fill(background_colour)
                    #   使用此颜色清除窗口,即用改颜色填充窗口

    e_colour = 200,0,0
    rect = 200,100,500,300
    pygame.draw.ellipse(screen, e_colour, rect, 10)
                    #   绘制椭圆

    pygame.display.update()
                    #   更新屏幕显示

结果

趣味益智游戏Python python趣味游戏编程,趣味益智游戏Python python趣味游戏编程_窗口标题_03,第3张

第二题

题目

选取一个示例,例如,绘制线条示例,修改它以便用随机的值绘制1000个线条。了解一下random库和random.randint()函数。

代码

# ch2 Question2: Drawing Random Lines
# python 3.8.0
# pygame 1.9.6

import pygame
import sys
import random
import time
from pygame.locals import *
pygame.init()

screen_size_x = 1000
screen_size_y = 600
screen_size = screen_size_x, screen_size_y
screen = pygame.display.set_mode(screen_size)
                    #   建立一个“画布”,名字为screen
pygame.display.set_caption("Draw Lines Randomly")
                    #   设置窗口标题
                    
background_colour = 0,0,0
screen.fill(background_colour)
                    #   只在开始画第一条线之前清除画板,后面画的线累积显示

line_num = 1000                    
for i in range(line_num):
                    #   一共显示line_num条直线
    for event in pygame.event.get():
                    #   读取当前事件状态
        if event.type in (QUIT, KEYDOWN):
                    #   监听鼠标和键盘,点右上角的X或者长按键盘退出
            sys.exit()

    r_e_colour = random.randint(0, 255)
    g_e_colour = random.randint(0, 255)
    b_e_colour = random.randint(0, 255)
    e_colour = r_e_colour, g_e_colour, b_e_colour
                    #   设置线条的颜色
    start_x = random.randint(0, screen_size_x)
    start_y = random.randint(0, screen_size_y)
    end_x = random.randint(0, screen_size_x)
    end_y = random.randint(0, screen_size_y)
    
    rect = 200,100,500,300
    pygame.draw.line(screen, e_colour, (start_x, start_y), (end_x, end_y), 5)
                    #   绘制椭圆

    pygame.display.update()
                    #   更新屏幕显示
	time.sleep(0.05)
                    #   一次做完延迟0.05秒做下一次显示

结果

趣味益智游戏Python python趣味游戏编程,趣味益智游戏Python python趣味游戏编程_原代码_04,第4张

趣味益智游戏Python python趣味游戏编程,趣味益智游戏Python python趣味游戏编程_pygame_05,第5张

第三题

题目

绘制矩形示例是唯一一个绕着屏幕移动形状的示例。修改该程序,以便任何时候,当矩形碰到屏幕边界时,矩形都将会改变颜色。

代码

# ch2 Question3:Rectangle Flying
# python 3.8.0
# pygame 1.9.6

import pygame
import sys
import random
import time
from pygame.locals import *
pygame.init()

screen_size_x = 1000
screen_size_y = 600
screen_size = screen_size_x, screen_size_y
screen = pygame.display.set_mode(screen_size)
                    #   建立一个“画布”,名字为screen
pygame.display.set_caption("Rectangles Flying")
                    #   设置窗口标题

# 初始位置         
pos_x = 300
pos_y = 250
# 矩形边长
rect_x = 100
rect_y = 100
# 矩形初始颜色
colour = random.randint(0,255), random.randint(0,255), random.randint(0,255)
# 设置速度方向
flag_x = 1
flag_y = 1
# 标记是否变色
change_colour = False

while True:
    for event in pygame.event.get():
                    #   读取当前事件状态
        if event.type in (QUIT, KEYDOWN):
                    #   监听鼠标和键盘,点右上角的X或者长按键盘退出
            sys.exit()

    background_colour = 0,0,0
    screen.fill(background_colour)

    vel_x = random.randint(0,5)
    vel_y = random.randint(0,5)
    
    pos_x += vel_x * flag_x
    pos_y += vel_y * flag_y
    
    # 保证方块在屏幕上,且实现变色
    if pos_x > screen_size_x - rect_x:
        flag_x = -flag_x
        pos_x = screen_size_x - rect_x
        change_colour = True
        
    elif pos_x < 0:
        flag_x = -flag_x
        pos_x = 0
        change_colour = True
        
    if pos_y > screen_size_y - rect_y:
        flag_y = -flag_y
        pos_y = screen_size_y - rect_y
        change_colour = True
        
    elif pos_y < 0:
        flag_y = -flag_y
        pos_y = 0
        hange_colour = True
        
    if change_colour:
        change_colour = False
        colour = random.randint(0,255), random.randint(0,255), random.randint(0,255)
    
    # 绘制矩形
    width = 0 #solid fill
    pos = pos_x, pos_y, rect_x, rect_y
    pygame.draw.rect(screen, colour, pos, width)
    
    pygame.display.update()

这里的代码比原代码稍微改进了一下:

  1. 移动速度稍微有一些变化,每一次在两个方向上的移动速度是一个随机数。
  2. 原代码中如果检测当前位置会超出框,则更改速度的方向,使其下一次可以回头,但是注意这里并不能保证当前步没有超出框,不是绝对的满足要求。因此在这里做了一点小改进。

结果

emmm这个好像没法截图哦,,那就留个悬念吧



https://www.xamrdz.com/lan/5tr1924612.html

相关文章: