pygame系列_箭刺Elephant游戏
这个游戏原名为:Chimp,我们可以到:
http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html
获取到源码和详细的源码讲解
下面是我对游戏的改编:
运行效果:

当箭刺到大象的时候,大象的身体就会翻转,并且发出声音,当然没有刺到的时候,也会发出另外的声音。

在游戏中,有很多地方值得我们参考,如加载图片,声音和异常处理等
=========================================
代码部分:
=========================================

1 #python elephant
2
3 #Import Modules
4 import os, pygame
5 from pygame.locals import *
6
7 __author__ = {'name' : 'Hongten',
8 'mail' : 'hongtenzone@foxmail.com',
9 'blog' : 'http://www.cnblogs.com/hongten',
10 'QQ' : '648719819',
11 'Version' : '1.0'}
12
13 if not pygame.font: print('Warning, fonts disabled')
14 if not pygame.mixer: print('Warning, sound disabled')
15
16
17 #functions to create our resources
18 def load_image(name, colorkey=None):
19 fullname = os.path.join('data', name)
20 try:
21 image = pygame.image.load(fullname)
22 except pygame.error as message:
23 print('Cannot load image:', fullname)
24 raise (SystemExit, message)
25 image = image.convert()
26 if colorkey is not None:
27 if colorkey is -1:
28 colorkey = image.get_at((0,0))
29 image.set_colorkey(colorkey, RLEACCEL)
30 return image, image.get_rect()
31
32 def load_sound(name):
33 class NoneSound:
34 def play(self): pass
35 if not pygame.mixer or not pygame.mixer.get_init():
36 return NoneSound()
37 fullname = os.path.join('data', name)
38 try:
39 sound = pygame.mixer.Sound(fullname)
40 except pygame.error as message:
41 print('Cannot load sound:', fullname)
42 raise (SystemExit, message)
43 return sound
44
45
46 #classes for our game objects
47 class Spear(pygame.sprite.Sprite):
48 """moves a clenched spear on the screen, following the mouse"""
49 def __init__(self):
50 pygame.sprite.Sprite.__init__(self) #call Sprite initializer
51 self.image, self.rect = load_image('spear-w.png', -1)
52 self.punching = 0
53
54 def update(self):
55 "move the spear based on the mouse position"
56 pos = pygame.mouse.get_pos()
57 self.rect.midtop = pos
58 if self.punching:
59 self.rect.move_ip(5, 10)
60
61 def punch(self, target):
62 "returns true if the spear collides with the target"
63 if not self.punching:
64 self.punching = 1
65 hitbox = self.rect.inflate(-5, -5)
66 return hitbox.colliderect(target.rect)
67
68 def unpunch(self):
69 "called to pull the spear back"
70 self.punching = 0
71
72
73 class Elephant(pygame.sprite.Sprite):
74 """moves a elephant critter across the screen. it can spin the
75 monkey when it is punched."""
76 def __init__(self):
77 pygame.sprite.Sprite.__init__(self) #call Sprite intializer
78 self.image, self.rect = load_image('elephant-nw.png', -1)
79 screen = pygame.display.get_surface()
80 self.area = screen.get_rect()
81 self.rect.topleft = 10, 10
82 self.move = 9
83 self.dizzy = 0
84
85 def update(self):
86 "walk or spin, depending on the monkeys state"
87 if self.dizzy:
88 self._spin()
89 else:
90 self._walk()
91
92 def _walk(self):
93 "move the monkey across the screen, and turn at the ends"
94 newpos = self.rect.move((self.move, 0))
95 if self.rect.left < self.area.left or \
96 self.rect.right > self.area.right:
97 self.move = -self.move
98 newpos = self.rect.move((self.move, 0))
99 self.image = pygame.transform.flip(self.image, 1, 0)
100 self.rect = newpos
101
102 def _spin(self):
103 "spin the monkey image"
104 center = self.rect.center
105 self.dizzy = self.dizzy + 12
106 if self.dizzy >= 360:
107 self.dizzy = 0
108 self.image = self.original
109 else:
110 rotate = pygame.transform.rotate
111 self.image = rotate(self.original, self.dizzy)
112 self.rect = self.image.get_rect(center=center)
113
114 def punched(self):
115 "this will cause the monkey to start spinning"
116 if not self.dizzy:
117 self.dizzy = 1
118 self.original = self.image
119
120
121 def main():
122 """this function is called when the program starts.
123 it initializes everything it needs, then runs in
124 a loop until the function returns."""
125 #Initialize Everything
126 pygame.init()
127 screen = pygame.display.set_mode((468, 60))
128 pygame.display.set_caption('Monkey Fever')
129 pygame.mouse.set_visible(0)
130
131 #Create The Backgound
132 background = pygame.Surface(screen.get_size())
133 background = background.convert()
134 background.fill((250, 250, 250))
135
136 #Put Text On The Background, Centered
137 if pygame.font:
138 font = pygame.font.Font(None, 36)
139 text = font.render("Pummel The Elephant, And Win $$$", 1, (10, 10, 10))
140 textpos = text.get_rect(centerx=background.get_width()/2)
141 background.blit(text, textpos)
142
143 #Display The Background
144 screen.blit(background, (0, 0))
145 pygame.display.flip()
146
147 #Prepare Game Objects
148 clock = pygame.time.Clock()
149 whiff_sound = load_sound('elephant-jump.wav')
150 punch_sound = load_sound('elephant-mmove.wav')
151 elephant = Elephant()
152 spear = Spear()
153 allsprites = pygame.sprite.RenderPlain((spear, elephant))
154
155 #Main Loop
156 while 1:
157 clock.tick(60)
158
159 #Handle Input Events
160 for event in pygame.event.get():
161 if event.type == QUIT:
162 return
163 elif event.type == KEYDOWN and event.key == K_ESCAPE:
164 return
165 elif event.type == MOUSEBUTTONDOWN:
166 if spear.punch(elephant):
167 punch_sound.play() #punch
168 elephant.punched()
169 else:
170 whiff_sound.play() #miss
171 elif event.type is MOUSEBUTTONUP:
172 spear.unpunch()
173
174 allsprites.update()
175
176 #Draw Everything
177 screen.blit(background, (0, 0))
178 allsprites.draw(screen)
179 pygame.display.flip()
180
181 #Game Over
182
183
184 #this calls the 'main' function when this script is executed
185 if __name__ == '__main__': main()

源码下载:http://files.cnblogs.com/liuzhi/spear_elephant.zip
pygame系列_箭刺Elephant游戏的更多相关文章
- pygame系列_箭刺Elephant游戏_源码下载
这个游戏原名为:Chimp,我们可以到: http://www.pygame.org/docs/tut/chimp/ChimpLineByLine.html 获取到源码和详细的源码讲解 下面是我对游戏 ...
- pygame系列_小球完全弹性碰撞游戏_源码下载
之前做了一个基于python的tkinter的小球完全碰撞游戏: python开发_tkinter_小球完全弹性碰撞游戏_源码下载 今天利用业余时间,写了一个功能要强大一些的小球完全碰撞游戏: 游戏名 ...
- pygame系列_小球完全弹性碰撞游戏
之前做了一个基于python的tkinter的小球完全碰撞游戏: 今天利用业余时间,写了一个功能要强大一些的小球完全碰撞游戏: 游戏名称: 小球完全弹性碰撞游戏规则: 1.游戏初始化的时候,有5个不同 ...
- pygame系列_原创百度随心听音乐播放器_完整版
程序名:PyMusic 解释:pygame+music 之前发布了自己写的小程序:百度随心听音乐播放器的一些效果图 你可以去到这里再次看看效果: pygame系列_百度随心听_完美的UI设计 这个程序 ...
- pygame系列_游戏中的事件
先看一下我做的demo: 当玩家按下键盘上的:上,下,左,右键的时候,后台会打印出玩家所按键的数字值,而图形会随之移动 这是客观上面存在的现象. 那么啥是事件呢? 你叫我做出定义,我不知道,我只能举个 ...
- pygame系列_游戏窗口显示策略
在这篇blog中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简单的例子,当然在 ...
- pygame系列_弹力球
这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...
- pygame系列_第一个程序_图片代替鼠标移动
想想现在学校pygame有几个钟了,就写了一个小程序:图片代替鼠标移动 程序的运行效果: 当鼠标移动到窗口内,鼠标不见了,取而代之的是图片..... ========================= ...
- pygame系列_百度随心听_完美的UI设计
这个程序的灵感来自于百度随心听 下面是我的程序截图: 说明: 动作按钮全部是画出来的,没有用到任何图片 用到图片的只有:背景,歌手图片,作者图片 代码正在调试中.... 如果你鼠标移动到黄色小圆里面, ...
随机推荐
- struts2官方演示程序总结struts2-blank
struts-2.2.3.1-all\struts-2.2.3.1\apps\struts2-blank总结 1.Html可以访问action ,如下: < head > ...
- Android broadcast
发送广播而且接受.发送两个广播 Intent intent = new Intent(); intent.setAction("com.wxq.CUSTOM_INTENT"); s ...
- 纯后端尝试写一个前端slide插件
概述 由于项目组前端人员缺失,又赶上需要在手机端做一个slide效果的页面,所以只能自己硬着头皮上了,写的很简单,请大家不要笑话,只是拿出来分享下,大家先看下完成后的效果,如下: 过程 看了效果图是不 ...
- 【Demo 0001】Java基础-数据类型
本章学习要点: 1. 了解Java 语言 2. 了解Java程序结构; 3. 了解Java中基本数据类型; 4. 掌握基本数据类型之间的运算 ...
- django url调度
Django的url配置相同遵循着DRY(dont repeat yourself)的规则.下面都是官方文档的样例: 首先介绍的是Django怎样处理http的请求: 1.在setting里定义ROO ...
- Delphi动态申请数组内存的方法(不使用SetLength,采用和C相似的方式)
procedure TForm1.Button1Click(Sender: TObject);type TArr = array [0..0] of Integer; PArr = ^TArr;v ...
- How a C++ compiler implements exception handling
Introduction One of the revolutionary features of C++ over traditional languages is its support for ...
- ZeroClipboard插件:兼容各浏览器网页复制功能
常规利用JS编写的网页复制功能只对IE有效,无法做到兼容其它浏览器,代码如下: function copyToClipBoard(){ var clipBoardContent="" ...
- XCode所有版本
You can find the DMGs for Xcode and other development tools onhttps://developer.apple.com/downloads/ ...
- ORACLE常用数据库类型(转)
oracle常用数据类型 1.Char 定长格式字符串,在数据库中存储时不足位数填补空格,它的声明方式如下CHAR(L),L为字符串长度,缺省为1,作为变量最大32767个字符,作为数据存储在ORAC ...