89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
""" pygame.examples.liquid
|
|
|
|
This example demonstrates a simplish water effect of an
|
|
image. It attempts to create a hardware display surface that
|
|
can use pageflipping for faster updates. Note that the colormap
|
|
from the loaded GIF image is copied to the colormap for the
|
|
display surface.
|
|
|
|
This is based on the demo named F2KWarp by Brad Graham of Freedom2000
|
|
done in BlitzBasic. I was just translating the BlitzBasic code to
|
|
pygame to compare the results. I didn't bother porting the text and
|
|
sound stuff, that's an easy enough challenge for the reader :]
|
|
"""
|
|
|
|
import pygame as pg
|
|
import os
|
|
from math import sin
|
|
import time
|
|
|
|
main_dir = os.path.split(os.path.abspath(__file__))[0]
|
|
|
|
|
|
def main():
|
|
# initialize and setup screen
|
|
pg.init()
|
|
screen = pg.display.set_mode((640, 480), pg.HWSURFACE | pg.DOUBLEBUF)
|
|
|
|
# load image and quadruple
|
|
imagename = os.path.join(main_dir, "data", "liquid.bmp")
|
|
bitmap = pg.image.load(imagename)
|
|
bitmap = pg.transform.scale2x(bitmap)
|
|
bitmap = pg.transform.scale2x(bitmap)
|
|
|
|
# get the image and screen in the same format
|
|
if screen.get_bitsize() == 8:
|
|
screen.set_palette(bitmap.get_palette())
|
|
else:
|
|
bitmap = bitmap.convert()
|
|
|
|
# prep some variables
|
|
anim = 0.0
|
|
|
|
# mainloop
|
|
xblocks = range(0, 640, 20)
|
|
yblocks = range(0, 480, 20)
|
|
stopevents = pg.QUIT, pg.KEYDOWN, pg.MOUSEBUTTONDOWN
|
|
while 1:
|
|
for e in pg.event.get():
|
|
if e.type in stopevents:
|
|
return
|
|
|
|
anim = anim + 0.02
|
|
for x in xblocks:
|
|
xpos = (x + (sin(anim + x * 0.01) * 15)) + 20
|
|
for y in yblocks:
|
|
ypos = (y + (sin(anim + y * 0.01) * 15)) + 20
|
|
screen.blit(bitmap, (x, y), (xpos, ypos, 20, 20))
|
|
|
|
pg.display.flip()
|
|
time.sleep(0.01)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|
|
|
|
"""BTW, here is the code from the BlitzBasic example this was derived
|
|
from. i've snipped the sound and text stuff out.
|
|
-----------------------------------------------------------------
|
|
; Brad@freedom2000.com
|
|
|
|
; Load a bmp pic (800x600) and slice it into 1600 squares
|
|
Graphics 640,480
|
|
SetBuffer BackBuffer()
|
|
bitmap$="f2kwarp.bmp"
|
|
pic=LoadAnimImage(bitmap$,20,15,0,1600)
|
|
|
|
; use SIN to move all 1600 squares around to give liquid effect
|
|
Repeat
|
|
f=0:w=w+10:If w=360 Then w=0
|
|
For y=0 To 599 Step 15
|
|
For x = 0 To 799 Step 20
|
|
f=f+1:If f=1600 Then f=0
|
|
DrawBlock pic,(x+(Sin(w+x)*40))/1.7+80,(y+(Sin(w+y)*40))/1.7+60,f
|
|
Next:Next:Flip:Cls
|
|
Until KeyDown(1)
|
|
"""
|