赞
踩
本篇文章给大家谈谈一些简单好玩的python编程游戏,以及python编写的入门简单小游戏,希望对各位有所帮助,不要忘了收藏本站喔。
游戏规则:使用方向键控制蛇去吃球。每吃一次球,蛇身就长出一格python画六瓣花。吃到自己或者出界游戏结束。
- from random import randrange
- from turtle import *
- from freegames import square, vector
-
- food = vector(0, 0)
- snake = [vector(10, 0)]
- aim = vector(0, -10)
-
-
- def change(x, y):
- """Change snake direction."""
- aim.x = x
- aim.y = y
-
-
- def inside(head):
- """Return True if head inside boundaries."""
- return -200 < head.x < 190 and -200 < head.y < 190
-
-
- def move():
- """Move snake forward one segment."""
- head = snake[-1].copy()
- head.move(aim)
-
- if not inside(head) or head in snake:
- square(head.x, head.y, 9, 'red')
- update()
- return
-
- snake.append(head)
-
- if head == food:
- print('Snake:', len(snake))
- food.x = randrange(-15, 15) * 10
- food.y = randrange(-15, 15) * 10
- else:
- snake.pop(0)
-
- clear()
-
- for body in snake:
- square(body.x, body.y, 9, 'black')
-
- square(food.x, food.y, 9, 'green')
- update()
- ontimer(move, 100)
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- listen()
- onkey(lambda: change(10, 0), 'Right')
- onkey(lambda: change(-10, 0), 'Left')
- onkey(lambda: change(0, 10), 'Up')
- onkey(lambda: change(0, -10), 'Down')
- move()
- done()
游戏演示:
游戏规则:用箭头导航控制黄色吃豆人吃掉所有白色食物,若被红色的鬼魂抓住,游戏结束。
- from random import choice
- from turtle import *
-
- from freegames import floor, vector
-
- state = {'score': 0}
- path = Turtle(visible=False)
- writer = Turtle(visible=False)
- aim = vector(5, 0)
- pacman = vector(-40, -80)
- ghosts = [
- [vector(-180, 160), vector(5, 0)],
- [vector(-180, -160), vector(0, 5)],
- [vector(100, 160), vector(0, -5)],
- [vector(100, -160), vector(-5, 0)],
- ]
- # fmt: off
- tiles = [
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- ]
- # fmt: on
-
-
- def square(x, y):
- """Draw square using path at (x, y)."""
- path.up()
- path.goto(x, y)
- path.down()
- path.begin_fill()
-
- for count in range(4):
- path.forward(20)
- path.left(90)
-
- path.end_fill()
-
-
- def offset(point):
- """Return offset of point in tiles."""
- x = (floor(point.x, 20) + 200) / 20
- y = (180 - floor(point.y, 20)) / 20
- index = int(x + y * 20)
- return index
-
-
- def valid(point):
- """Return True if point is valid in tiles."""
- index = offset(point)
-
- if tiles[index] == 0:
- return False
-
- index = offset(point + 19)
-
- if tiles[index] == 0:
- return False
-
- return point.x % 20 == 0 or point.y % 20 == 0
-
-
- def world():
- """Draw world using path."""
- bgcolor('black')
- path.color('blue')
-
- for index in range(len(tiles)):
- tile = tiles[index]
-
- if tile > 0:
- x = (index % 20) * 20 - 200
- y = 180 - (index // 20) * 20
- square(x, y)
-
- if tile == 1:
- path.up()
- path.goto(x + 10, y + 10)
- path.dot(2, 'white')
-
-
- def move():
- """Move pacman and all ghosts."""
- writer.undo()
- writer.write(state['score'])
-
- clear()
-
- if valid(pacman + aim):
- pacman.move(aim)
-
- index = offset(pacman)
-
- if tiles[index] == 1:
- tiles[index] = 2
- state['score'] += 1
- x = (index % 20) * 20 - 200
- y = 180 - (index // 20) * 20
- square(x, y)
-
- up()
- goto(pacman.x + 10, pacman.y + 10)
- dot(20, 'yellow')
-
- for point, course in ghosts:
- if valid(point + course):
- point.move(course)
- else:
- options = [
- vector(5, 0),
- vector(-5, 0),
- vector(0, 5),
- vector(0, -5),
- ]
- plan = choice(options)
- course.x = plan.x
- course.y = plan.y
-
- up()
- goto(point.x + 10, point.y + 10)
- dot(20, 'red')
-
- update()
-
- for point, course in ghosts:
- if abs(pacman - point) < 20:
- return
-
- ontimer(move, 100)
-
-
- def change(x, y):
- """Change pacman aim if valid."""
- if valid(pacman + vector(x, y)):
- aim.x = x
- aim.y = y
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- writer.goto(160, 160)
- writer.color('white')
- writer.write(state['score'])
- listen()
- onkey(lambda: change(5, 0), 'Right')
- onkey(lambda: change(-5, 0), 'Left')
- onkey(lambda: change(0, 5), 'Up')
- onkey(lambda: change(0, -5), 'Down')
- world()
- move()
- done()
游戏演示:
游戏规则:点击屏幕发射炮弹。炮弹在它的路径上弹出蓝色气球。在气球穿过屏幕之前把它们全部弹出。
- from random import randrange
- from turtle import *
-
- from freegames import vector
-
- ball = vector(-200, -200)
- speed = vector(0, 0)
- targets = []
-
-
- def tap(x, y):
- """Respond to screen tap."""
- if not inside(ball):
- ball.x = -199
- ball.y = -199
- speed.x = (x + 200) / 25
- speed.y = (y + 200) / 25
-
-
- def inside(xy):
- """Return True if xy within screen."""
- return -200 < xy.x < 200 and -200 < xy.y < 200
-
-
- def draw():
- """Draw ball and targets."""
- clear()
-
- for target in targets:
- goto(target.x, target.y)
- dot(20, 'blue')
-
- if inside(ball):
- goto(ball.x, ball.y)
- dot(6, 'red')
-
- update()
-
-
- def move():
- """Move ball and targets."""
- if randrange(40) == 0:
- y = randrange(-150, 150)
- target = vector(200, y)
- targets.append(target)
-
- for target in targets:
- target.x -= 0.5
-
- if inside(ball):
- speed.y -= 0.35
- ball.move(speed)
-
- dupe = targets.copy()
- targets.clear()
-
- for target in dupe:
- if abs(target - ball) > 13:
- targets.append(target)
-
- draw()
-
- for target in targets:
- if not inside(target):
- return
-
- ontimer(move, 50)
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- up()
- tracer(False)
- onscreenclick(tap)
- move()
- done()
游戏演示:
游戏规则:单击行可放置光盘。第一个垂直、水平或对角连接四张光盘的玩家获胜。
- from turtle import *
-
- from freegames import line
-
- turns = {'red': 'yellow', 'yellow': 'red'}
- state = {'player': 'yellow', 'rows': [0] * 8}
-
-
- def grid():
- """Draw Connect Four grid."""
- bgcolor('light blue')
-
- for x in range(-150, 200, 50):
- line(x, -200, x, 200)
-
- for x in range(-175, 200, 50):
- for y in range(-175, 200, 50):
- up()
- goto(x, y)
- dot(40, 'white')
-
- update()
-
-
- def tap(x, y):
- """Draw red or yellow circle in tapped row."""
- player = state['player']
- rows = state['rows']
-
- row = int((x + 200) // 50)
- count = rows[row]
-
- x = ((x + 200) // 50) * 50 - 200 + 25
- y = count * 50 - 200 + 25
-
- up()
- goto(x, y)
- dot(40, player)
- update()
-
- rows[row] = count + 1
- state['player'] = turns[player]
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- grid()
- onscreenclick(tap)
- done()
游戏演示:
游戏规则:点击屏幕来拍打鸟的翅膀。飞过屏幕被黑色乌鸦碰到,游戏结束。
- from random import *
- from turtle import *
-
- from freegames import vector
-
- bird = vector(0, 0)
- balls = []
-
-
- def tap(x, y):
- """Move bird up in response to screen tap."""
- up = vector(0, 30)
- bird.move(up)
-
-
- def inside(point):
- """Return True if point on screen."""
- return -200 < point.x < 200 and -200 < point.y < 200
-
-
- def draw(alive):
- """Draw screen objects."""
- clear()
-
- goto(bird.x, bird.y)
-
- if alive:
- dot(10, 'green')
- else:
- dot(10, 'red')
-
- for ball in balls:
- goto(ball.x, ball.y)
- dot(20, 'black')
-
- update()
-
-
- def move():
- """Update object positions."""
- bird.y -= 5
-
- for ball in balls:
- ball.x -= 3
-
- if randrange(10) == 0:
- y = randrange(-199, 199)
- ball = vector(199, y)
- balls.append(ball)
-
- while len(balls) > 0 and not inside(balls[0]):
- balls.pop(0)
-
- if not inside(bird):
- draw(False)
- return
-
- for ball in balls:
- if abs(ball - bird) < 15:
- draw(False)
- return
-
- draw(True)
- ontimer(move, 50)
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- up()
- tracer(False)
- onscreenclick(tap)
- move()
- done()
游戏演示:
游戏规则:单击方格用于显示数字。匹配两个数字,方格将显示从而显示图像。
- from random import *
- from turtle import *
-
- from freegames import path
-
- car = path('car.gif')
- tiles = list(range(32)) * 2
- state = {'mark': None}
- hide = [True] * 64
-
-
- def square(x, y):
- """Draw white square with black outline at (x, y)."""
- up()
- goto(x, y)
- down()
- color('black', 'white')
- begin_fill()
- for count in range(4):
- forward(50)
- left(90)
- end_fill()
-
-
- def index(x, y):
- """Convert (x, y) coordinates to tiles index."""
- return int((x + 200) // 50 + ((y + 200) // 50) * 8)
-
-
- def xy(count):
- """Convert tiles count to (x, y) coordinates."""
- return (count % 8) * 50 - 200, (count // 8) * 50 - 200
-
-
- def tap(x, y):
- """Update mark and hidden tiles based on tap."""
- spot = index(x, y)
- mark = state['mark']
-
- if mark is None or mark == spot or tiles[mark] != tiles[spot]:
- state['mark'] = spot
- else:
- hide[spot] = False
- hide[mark] = False
- state['mark'] = None
-
-
- def draw():
- """Draw image and tiles."""
- clear()
- goto(0, 0)
- shape(car)
- stamp()
-
- for count in range(64):
- if hide[count]:
- x, y = xy(count)
- square(x, y)
-
- mark = state['mark']
-
- if mark is not None and hide[mark]:
- x, y = xy(mark)
- up()
- goto(x + 2, y)
- color('black')
- write(tiles[mark], font=('Arial', 30, 'normal'))
-
- update()
- ontimer(draw, 100)
-
-
- shuffle(tiles)
- setup(420, 420, 370, 0)
- addshape(car)
- hideturtle()
- tracer(False)
- onscreenclick(tap)
- draw()
- done()
游戏演示:
游戏规则:用键盘上下移动划桨,谁先丢失球,谁输!(左ws上下,右ik上下)
- from random import choice, random
- from turtle import *
-
- from freegames import vector
-
-
- def value():
- """Randomly generate value between (-5, -3) or (3, 5)."""
- return (3 + random() * 2) * choice([1, -1])
-
-
- ball = vector(0, 0)
- aim = vector(value(), value())
- state = {1: 0, 2: 0}
-
-
- def move(player, change):
- """Move player position by change."""
- state[player] += change
-
-
- def rectangle(x, y, width, height):
- """Draw rectangle at (x, y) with given width and height."""
- up()
- goto(x, y)
- down()
- begin_fill()
- for count in range(2):
- forward(width)
- left(90)
- forward(height)
- left(90)
- end_fill()
-
-
- def draw():
- """Draw game and move pong ball."""
- clear()
- rectangle(-200, state[1], 10, 50)
- rectangle(190, state[2], 10, 50)
-
- ball.move(aim)
- x = ball.x
- y = ball.y
-
- up()
- goto(x, y)
- dot(10)
- update()
-
- if y < -200 or y > 200:
- aim.y = -aim.y
-
- if x < -185:
- low = state[1]
- high = state[1] + 50
-
- if low <= y <= high:
- aim.x = -aim.x
- else:
- return
-
- if x > 185:
- low = state[2]
- high = state[2] + 50
-
- if low <= y <= high:
- aim.x = -aim.x
- else:
- return
-
- ontimer(draw, 50)
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- listen()
- onkey(lambda: move(1, 20), 'w')
- onkey(lambda: move(1, -20), 's')
- onkey(lambda: move(2, 20), 'i')
- onkey(lambda: move(2, -20), 'k')
- draw()
- done()
游戏演示:
游戏规则:点击屏幕放置一个X或O。连续连接三个,就赢了!
- from turtle import *
-
- from freegames import line
-
-
- def grid():
- """Draw tic-tac-toe grid."""
- line(-67, 200, -67, -200)
- line(67, 200, 67, -200)
- line(-200, -67, 200, -67)
- line(-200, 67, 200, 67)
-
-
- def drawx(x, y):
- """Draw X player."""
- line(x, y, x + 133, y + 133)
- line(x, y + 133, x + 133, y)
-
-
- def drawo(x, y):
- """Draw O player."""
- up()
- goto(x + 67, y + 5)
- down()
- circle(62)
-
-
- def floor(value):
- """Round value down to grid with square size 133."""
- return ((value + 200) // 133) * 133 - 200
-
-
- state = {'player': 0}
- players = [drawx, drawo]
-
-
- def tap(x, y):
- """Draw X or O in tapped square."""
- x = floor(x)
- y = floor(y)
- player = state['player']
- draw = players[player]
- draw(x, y)
- update()
- state['player'] = not player
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- grid()
- update()
- onscreenclick(tap)
- done()
游戏演示:
游戏规则:单击靠近空正方形的方格以交换位置。将所有数字从左到右按顺序排列。
- from random import *
- from turtle import *
-
- from freegames import floor, vector
-
- tiles = {}
- neighbors = [
- vector(100, 0),
- vector(-100, 0),
- vector(0, 100),
- vector(0, -100),
- ]
-
-
- def load():
- """Load tiles and scramble."""
- count = 1
-
- for y in range(-200, 200, 100):
- for x in range(-200, 200, 100):
- mark = vector(x, y)
- tiles[mark] = count
- count += 1
-
- tiles[mark] = None
-
- for count in range(1000):
- neighbor = choice(neighbors)
- spot = mark + neighbor
-
- if spot in tiles:
- number = tiles[spot]
- tiles[spot] = None
- tiles[mark] = number
- mark = spot
-
-
- def square(mark, number):
- """Draw white square with black outline and number."""
- up()
- goto(mark.x, mark.y)
- down()
-
- color('black', 'white')
- begin_fill()
- for count in range(4):
- forward(99)
- left(90)
- end_fill()
-
- if number is None:
- return
- elif number < 10:
- forward(20)
-
- write(number, font=('Arial', 60, 'normal'))
-
-
- def tap(x, y):
- """Swap tile and empty square."""
- x = floor(x, 100)
- y = floor(y, 100)
- mark = vector(x, y)
-
- for neighbor in neighbors:
- spot = mark + neighbor
-
- if spot in tiles and tiles[spot] is None:
- number = tiles[mark]
- tiles[spot] = number
- square(spot, number)
- tiles[mark] = None
- square(mark, None)
-
-
- def draw():
- """Draw all tiles."""
- for mark in tiles:
- square(mark, tiles[mark])
- update()
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- load()
- draw()
- onscreenclick(tap)
- done()
游戏演示:
游戏规则:从一边移到另一边。轻触屏幕可跟踪从一侧到另一侧的路径。
- from random import random
- from turtle import *
-
- from freegames import line
-
-
- def draw():
- """Draw maze."""
- color('black')
- width(5)
-
- for x in range(-200, 200, 40):
- for y in range(-200, 200, 40):
- if random() > 0.5:
- line(x, y, x + 40, y + 40)
- else:
- line(x, y + 40, x + 40, y)
-
- update()
-
-
- def tap(x, y):
- """Draw line and dot for screen tap."""
- if abs(x) > 198 or abs(y) > 198:
- up()
- else:
- down()
-
- width(2)
- color('red')
- goto(x, y)
- dot(4)
-
-
- setup(420, 420, 370, 0)
- hideturtle()
- tracer(False)
- draw()
- onscreenclick(tap)
- done()
游戏演示:
以上就是今天的小游戏分享了,后续出下篇。
关注我咱们下期再见!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。