Python 练习项目1 弹球游戏
这几天学习了python的基础知识,然后参考了网上的一些资料,完成了一个自己的小游戏,弹球游戏比较简单,但却具备了一些游戏的普遍特征,对于初学者是一个比较合适的锻炼的项目。
下面是效果图:

完整程序:
# python learningpython.py
# python learningpython.py
import tkinter #引入GUI工具包
import random #引入随机函数
import time #引入定时器 #创建一个界面和配置界面的一些基本属性
tk = tkinter.Tk()
tk.title('Game')
tk.resizable(0, 0) #表示不能被拉伸
tk.wm_attributes('-topmost', 1) #通知管理器调整布局大小
canvas = tkinter.Canvas(tk, width=500, height=400, bd=0, highlightthickness=0)
canvas.pack() #使能器件
tk.update() #更新界面 game_startsigal_text=canvas.create_text(430,10,text='DOWN:START',font=('Times',10),state='hidden')
game_endsigal_text=canvas.create_text(430,30,text='UP:END',font=('Times',10),state='hidden')
game_leftsigal_text=canvas.create_text(430,50,text='LEFT:LEFT',font=('Times',10),state='hidden')
game_rightsigal_text=canvas.create_text(430,70,text='RIGHT:RIGHT',font=('Times',10),state='hidden') game_over_text=canvas.create_text(250,200,text='GAME OVER',font=('Times',30),state='hidden')
game_start_text=canvas.create_text(430,110,text='GAME START',font=('Times',10),state='hidden')
game_score_text=canvas.create_text(430,90,text='SCORE:',font=('Times',10),state='hidden') #定义木板类
class Paddle:
def __init__(self,canvas,color): #初始化
self.canvas=canvas
self.id=canvas.create_rectangle(0,0,150,10,fill=color)
self.canvas.move(self.id,150,380)
self.started=False
self.x=0
self.canvas_width=self.canvas.winfo_width()
self.canvas.bind_all("<KeyPress-Left>",self.turn_left)
self.canvas.bind_all("<KeyPress-Right>",self.turn_right)
self.canvas.bind_all("<KeyPress-Down>", self.game_start)
self.canvas.bind_all("<KeyPress-Up>", self.game_stop)
def turn_left(self,evt): #左转
self.x=-4
def turn_right(self,evt): #右转
self.x=4
def game_start(self,evt): #开始
self.started=True
def game_stop(self,evt): #停止
self.started = False
def draw(self): #画出木板
self.canvas.move(self.id,self.x,0)
pos=self.canvas.coords(self.id)
if pos[0]<=0:
self.x=0
if pos[2]>=500:
self.x=0
class Ball():
def __init__(self,canvas,paddle,color):
self.canvas=canvas
self.paddle=paddle
self.id=canvas.create_oval(10,10,25,25,fill=color)
self.canvas.move(self.id,245,100)
starts=[-3,-2,-1,1,1,2,3]
random.shuffle(starts)
self.x=starts[0]
self.y=-3
self.canvas_height=self.canvas.winfo_height()
self.hit_bottom = False
def hit_paddle(self,pos):
paddle_pos=self.canvas.coords(self.paddle.id)
if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]:
if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]:
return True
return False
def draw(self):
self.canvas.move(self.id,self.x,self.y)
pos=self.canvas.coords(self.id)
if pos[3]>=self.canvas_height:
self.hit_bottom=True
if self.hit_paddle(pos)==True:
self.y=-3
score.addscore()
if pos[0]<=0:
self.x+=1
if pos[1]<=0:
self.y=1
if pos[2]>=500:
self.x-=1
if pos[3]>=self.canvas_height:
self.y=-1 class Score:
def __init__(self,canvas,color):
self.score=0;
self.canvas=canvas
canvas.itemconfig(game_score_text, state='normal')
self.id=canvas.create_text(470,90,text=self.score,fill=color) canvas.itemconfig(game_startsigal_text, state='normal')
canvas.itemconfig(game_endsigal_text, state='normal')
canvas.itemconfig(game_leftsigal_text, state='normal')
canvas.itemconfig(game_rightsigal_text, state='normal')
def addscore(self):
self.score+=1
self.canvas.itemconfig(self.id,text=self.score) paddle=Paddle(canvas,'blue')
ball=Ball(canvas,paddle,'red')
score=Score(canvas,'black') while 1:
if ball.hit_bottom==False and paddle.started==True:
ball.draw()
paddle.draw()
canvas.itemconfig(game_start_text, state='normal')
if ball.hit_bottom==True:
canvas.itemconfig(game_over_text, state='normal')
canvas.itemconfig(game_start_text, state='hidden')
tk.update_idletasks()
tk.update()
time.sleep(0.01) 欢迎交流!
Python 练习项目1 弹球游戏的更多相关文章
- Python开发项目:大型模拟战争游戏(外星人入侵)
外星人入侵 游戏概述: 现在准备用python开始搞一个大型游戏,模拟未来战争,地球人狙击外星人大战(其实就是小蜜蜂游戏2333),玩家控制一个飞船,用子弹歼灭屏幕上空的外星飞船:项目用到了Pygam ...
- 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile
通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...
- 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数
通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...
- 通过游戏学python 3.6 第一季 第二章 实例项目 猜数字游戏--核心代码--猜测次数 可复制直接使用 娱乐 可封装 函数
猜数字游戏--核心代码--猜测次数 #猜数字--核心代码--猜测次数 number=33 amount=3 count=0 while count<=amount: conversion ...
- 初识python:tkinter 实现 弹球小游戏(面向对象)
使用蹩脚式面相对象,实现弹球小游戏(非面向对象实现,主要介绍tk基础用法). #!/user/bin env python # author:Simple-Sir # time:2020/8/7 10 ...
- 初识python:tkinter 实现 弹球小游戏(非面相对象)
通过 tkinter 采用非面相对象式实现弹球小游戏(使用蹩脚式面相对象实现). #!/user/bin env python # author:Simple-Sir # time:2020/8/3 ...
- python实战===2017年30个惊艳的Python开源项目 (转)
本文转自:http://www.sohu.com/a/216723120_115128 摘要:本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目.点击每一个都可以在GitHub ...
- python实战项目
没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用到实际开发中更是不得而知了! 以上就是我们在学习过程中必须要有项目实战开发经验的原因,其实无论项 ...
- 【年度盘点】10个热门Python练习项目
这10个项目,约有270000人学习过. 今天给大家盘点一下实验楼最热门的10个Python练习项目.第二名是<200 行 Python 代码实现 2048>,第三名是<Python ...
随机推荐
- BZOJ - 2741 分块维护最大连续异或和
题意:给定\(a[l...r]\),多次询问区间\([l,r]\)中的最大连续异或和\(a_i⊕a_{i+1}⊕...⊕a_{j},l≤i≤j≤r\) 一眼过去认为是不可做的,但题目给出\(n=1.2 ...
- 2018牛客多校6 - I Team Rocket KD树维护空间
题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满 ...
- 彻底成功配置Maven和Eclipse集成
这篇文章是分享给还在苦苦挣扎eclipse和Maven环境配置的同志,让其少走弯路,话不多说,直接开始吧 环境出问题一是配置没有配置好,二是各个部分可能出现兼容问题,导致错误,综上,我选择了一个切实可 ...
- linux普通用户免秘钥登录(xshell工具环境)
一.xshell生成密钥 1)工具->新建用户密钥生成向导 2)选择密钥类型.密钥长度(默认即可) 3)生成密钥(生成公钥和私钥) 4)为密钥加密,增加密码(可选),建议加上 5)将公钥保存为文 ...
- PHP的curl实现get,post 和 cookie (转)
类似于dreamhost这类主机服务商,是显示fopen的使用 的.使用php的curl可以实现支持FTP.FTPS.HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE ...
- 2.使用ngx_http_auth_basic_module模块为不带认证的资源添加授权
1.首先需要生成用户名和密码 使用openssl来生成,生成命令(openssl在安装nginx的时候已经安装) echo "kibana:$(openssl passwd -crypt y ...
- 修改Tomcat使用的JVM内存大小
我的服务器的配置: # OS specific support. $var _must_ be set to either true or false. JAVA_OPTS="-Xms10 ...
- ugui的优化
参考文章 https://www.jianshu.com/p/061e67308e5f https://www.jianshu.com/p/8a9ccf34860e http://blog.jobbo ...
- <数据挖掘导论>读书笔记7 Apriori算法
Apriori算法是一种最有影响的挖掘布尔关联规则频繁项集的算法.其核心是基于两阶段频集思想的递推算法.该关联规则在分类上属于单维.单层.布尔关联规则.在这里,所有支持度大于最小支持度的项集称为频繁项 ...
- rem单位怎么使用
rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...