这几天学习了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 弹球游戏的更多相关文章

  1. Python开发项目:大型模拟战争游戏(外星人入侵)

    外星人入侵 游戏概述: 现在准备用python开始搞一个大型游戏,模拟未来战争,地球人狙击外星人大战(其实就是小蜜蜂游戏2333),玩家控制一个飞船,用子弹歼灭屏幕上空的外星飞船:项目用到了Pygam ...

  2. 通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数--菜单功能'menufile

      通过游戏学python 3.6 第一季 第九章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁 ...

  3. 通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账号--锁定次数

    通过游戏学python 3.6 第一季 第八章 实例项目 猜数字游戏--核心代码--猜测次数--随机函数和屏蔽错误代码--优化代码及注释--简单账号密码登陆--账号的注册查询和密码的找回修改--锁定账 ...

  4. 通过游戏学python 3.6 第一季 第二章 实例项目 猜数字游戏--核心代码--猜测次数 可复制直接使用 娱乐 可封装 函数

      猜数字游戏--核心代码--猜测次数   #猜数字--核心代码--猜测次数 number=33 amount=3 count=0 while count<=amount: conversion ...

  5. 初识python:tkinter 实现 弹球小游戏(面向对象)

    使用蹩脚式面相对象,实现弹球小游戏(非面向对象实现,主要介绍tk基础用法). #!/user/bin env python # author:Simple-Sir # time:2020/8/7 10 ...

  6. 初识python:tkinter 实现 弹球小游戏(非面相对象)

    通过 tkinter 采用非面相对象式实现弹球小游戏(使用蹩脚式面相对象实现). #!/user/bin env python # author:Simple-Sir # time:2020/8/3 ...

  7. python实战===2017年30个惊艳的Python开源项目 (转)

    本文转自:http://www.sohu.com/a/216723120_115128 摘要:本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目.点击每一个都可以在GitHub ...

  8. python实战项目

    没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用到实际开发中更是不得而知了! 以上就是我们在学习过程中必须要有项目实战开发经验的原因,其实无论项 ...

  9. 【年度盘点】10个热门Python练习项目

    这10个项目,约有270000人学习过. 今天给大家盘点一下实验楼最热门的10个Python练习项目.第二名是<200 行 Python 代码实现 2048>,第三名是<Python ...

随机推荐

  1. springboot(十一)-为什么要用springboot

    前言 学习了一段时间springboot,一般都可以在项目中使用springboot开发了.因为springboot的东西并不多,或者说,springboot根本就没有新东西. 好了,现在问一句,我们 ...

  2. python 模块和包以及他们的导入关系

    一 模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编 ...

  3. 当Appium中遇到alert(python篇)

    当Appium中遇到alert,可以使用switch_to_alert(),以下是微信登录切换登录方式的代码示例: #coding=utf-8 from appium import webdriver ...

  4. docker 容器 centos + tomcat + jdk

    环境: 阿里云ecs服务器 步骤: 1.安装docker 2.获取centos镜像 3.下载tomcat 和 jdk 安装包 4.配置 1.安装docker https://www.cnblogs.c ...

  5. springboot利用fastjson序列化输出(默认是jackson)

    在@SpringBootApplication类中添加 @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { //创 ...

  6. Rabbitmq的五种模式和案例

    消息生产者p将消息放入队列 消费者监听队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列删除 (缺点:消息可能没有被消费者正确处理,已经消失了,无法恢复) 应用场景:聊天室 1.引入依赖 &l ...

  7. JS框架设计之模块加载系统

    任何语言一到大规模应用阶段,必然要拆封模块,有利于维护和团队协作,与Java走得最近的dojo率先引进了加载器,使用document.write与同步Ajax请求实现,后台dojo以JSONP的方法来 ...

  8. 记一次idea性能调优

    因自研的自动化测试工具包含压测功能,在自己本地代码开发完毕后进行测试,对目标接口进行1000次访问,发现idea在执行结束后变的异常卡顿,怀疑是idea工具或者程序代码存在问题,遂进行排查. ---- ...

  9. Android创建定时和周期任务

    问题:应用需要按时执行某个操作,例如定时更新UI. 解决方案:使用Handler提供的定时操作功能.通过Handler,可以在指定的时间或是指定的延时后执行操作. 下面看一个在TextView中显示当 ...

  10. [转载+补充]windows下SVN客户端的安装

    来源:TortoiseSVN新人使用指南 1. 首先安装SVN客户端,windows一般选择乌龟客户端https://tortoisesvn.net/downloads.html. 2. 根据系统位数 ...