弹球游戏实验:Ball_Game v1.0

原创 2017年11月01日 22:32:54

这个游戏程序是按照《趣学python编程》书中的小球实验做得一个基础程序,使用python2.7编程,原书使用python3写的程序,可能有些性质2.7的不太兼容,当然最大的原因可能还是自己对这一部分指示掌握的不够好。后续在python的学习中会深入掌我面向对象的这个编程思路,在这篇程序中来说好像都还是面向过程的操作,感觉还没有完全把python的性质利用起来。

游戏运作的基本思路是:给定小球运动的方向和速度,当小球运动到边界时,小球会随机改变方向弹回去,当小球落在球拍上时,只改变y方向上速度的方向,x分量不变,实现反弹的效果。书中剩下输赢,计时,分级等功能在后期版本上会继续补足完善。

另外,由于我的脚本是在一台win7系统32位的电脑上编写 调试的,当我把程序换到我常用的64位win10系统上调试的时候,延时就会出现一些问题,gui的界面也会有一些差别。另外我的代码是在notepad++里面编写的,运行使用powershell用命令行更改目录到python的安装目录下,进入python环境,脚本要保存在python安装路径下,就可以直接使用import 导入到环境,进而开始游戏。
视频链接:http://v.youku.com/v_show/id_XMzEzMzYxOTExMg==.html?spm=a2hzp.8244740.0.0

powershell进入环境
Gui界面

import time
from Tkinter import *
import random
import math as mt
#定义游戏的一些初始设定,画面宽度长度,球的直径,起始位置
window_width=400
window_height=400

ball_size=10

start_x=random.randint(0,window_width)
start_y=random.randint(0,window_height)
step_x=1
step_y=1

pad_width=150
pad_hight=5

pad_startX=(window_width-pad_width)/2
pad_startY=350

d_p=[1,2,3,4,5,6]       #小球运动方向正方向:
d_n=[-1,-2,-3,-4,-5,-6] #小球运动方向反方向
d_t=[-3,-2,-1,0,1,2,3]  #小球运动方向 任意方向
#小球运动x,y方向的初始方向分量
d_x=0.5
d_y=0.5

#创建画布,并建立对象小球 球拍
tk=Tk()
tk.title("Game")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
canvas=Canvas(tk,width=window_width,height=window_height,highlightthickness=0)
canvas.pack()
tk.update()
ball=canvas.create_oval(start_x,start_y,start_x+ball_size,start_y+rball_size,fill='red')

pad=canvas.create_rectangle(pad_startX,pad_startY,pad_startX+pad_width,pad_startY+5,fill='blue')

#判断是否发生击球动作,发生则返回True
def hit_paddle(ball_id,pad_id):
    pos_ball=canvas.coords(ball_id)
    pos_pad=canvas.coords(pad_id)
    if pos_ball[2]>=pos_pad[0] and pos_ball[0]<=pos_pad[2]:
        if pos_ball[3]>=pos_pad[1] and pos_ball[3]<=pos_pad[3]:
            return True 
        return False

#移动球拍,按一次,移动四个像素
def move_pad(event):
    if event.keysym=='Right':
        canvas.move(pad,4,0)
    elif event.keysym=='Left':
        canvas.move(pad,-4,0)
#自动运行检测输入,按下回车开始小球开始运动
def atmo(event):
    while True:
        step_x,step_y=change_dir()
        canvas.move(ball,step_x,step_y)
        canvas.update()
        time.sleep(0.02)

#改变方向,反弹,当碰到边界时改变方向,当发生击球动作时,对y轴分量,求倒数
def change_dir():
    global step_x,step_y ,d_x,d_y
    speed=4                         #速度 
    POS=canvas.coords(ball)
    if POS[0]<=step_x:
        d_y=random.choice(d_t)
        d_x=random.choice(d_p)
    elif POS[1]<=step_y:
        d_x=random.choice(d_t)
        d_y=random.choice(d_p)
    elif (window_width-POS[2])<=step_x:
        d_x=random.choice(d_n)
        d_y=random.choice(d_t)
    elif (window_height-POS[3])<=step_y:
        d_x=random.choice(d_t)
        d_y=random.choice(d_n)
    if hit_paddle(ball,pad)==True:
        d_y=-d_y
        d_x=d_x

    s=mt.sqrt(d_x*d_x+d_y*d_y)   #计算不同方向下速度在x与y方向上的分量,保证小球匀速运动
    step_x=speed*d_x/s
    step_y=speed*d_y/s

    return step_x,step_y
#基本操作,按下回车小球开始运动,按键盘方向键,左右,球拍左右移动
canvas.bind_all('<KeyPress-Right>',move_pad)
canvas.bind_all('<KeyPress-Left>',move_pad)
canvas.bind_all('<KeyPress-Return>',atmo)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cc1609130201/article/details/78419660

Java程序设计实验报告2(弹球游戏)

  • 2012年06月26日 17:24
  • 102KB
  • 下载

基于Flash的弹球游戏的设计与实现

  • 2010年04月18日 17:05
  • 280KB
  • 下载

java 弹幕 弹球 多线程

java 多线程
  • u013076044
  • u013076044
  • 2015-05-29 14:57:42
  • 1101

java弹球游戏

  • 2014年12月04日 22:28
  • 62KB
  • 下载

弹球游戏源代码

package com; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.a...
  • YangRunkangBla
  • YangRunkangBla
  • 2015-04-19 23:00:05
  • 970

HTML5与Javascript 实现网页弹球游戏

使用Html5 和Javascript编写的弹球游戏,实现了道具的掉落与拾取
  • u010485034
  • u010485034
  • 2014-08-31 20:00:31
  • 2298

Java学习之道:弹球游戏分步解析(二)——让小球飞

之前跟大家说要把事件监听器和多线程分开来讲,不过之后发现事件监听器要涉及到很多小球运动的操作,所以,决定将两个知识点合起来说,这样会更便于大家理解: 实现小球在我们所绘制的窗体上运动就必须要用到多线...
  • u011511429
  • u011511429
  • 2013-07-31 20:18:47
  • 2569

Python-弹球游戏增强版

from tkinter import * import time import random tk = Tk() tk.title("Game") tk.resizable(0,0) tk.wm_...
  • wangluoershixiong
  • wangluoershixiong
  • 2016-01-16 11:24:45
  • 1444

Tkinter做弹球游戏

要求:小球撞击到墙壁的时候,会反弹,当碰到球拍的时候,也会反弹,如果碰到底部的时候,游戏结束,输出总共碰撞了多少次。 控制程序运行的类(paddleball.py) #!/usr/bin/pyth...
  • You_are_my_dream
  • You_are_my_dream
  • 2016-10-28 19:40:34
  • 1243

一个java写的弹球小游戏

import java.awt.*; import java.applet.*; import javax.swing.*; import java.awt.event.*; import j...
  • dog250
  • dog250
  • 2010-02-09 20:53:00
  • 4461
收藏助手
不良信息举报
您举报文章:弹球游戏实验:Ball_Game v1.0
举报原因:
原因补充:

(最多只允许输入30个字)