这些游戏你玩过几个?
- 1.贪吃蛇
- 2.吃豆人
- 3.加农炮
- 4.四子棋
- 5. Fly Bird
- <font color = #f3704ab>6.记忆:数字对拼图游戏(欢迎挑战!用时:2min)
- 7.乒乓球
- 8.上课划水必备-井字游戏(我敢说100%的人都玩过)
- 9.将数字滑动到位的拼图游戏
- 10.迷宫(我己经晕了,你们来)
- 获取更多
1.贪吃蛇
👉游戏规则:使用方向键控制蛇去吃球。每吃一次球,蛇身就长出一格。吃到自己或者出界游戏结束。
from random import randrange
from turtle import *
from freegames import square, vectorfood = vector(0, 0)
snake = [vector(10, 0)]
aim = vector(0, -10)def change(x, y):"""Change snake direction."""aim.x = xaim.y = ydef inside(head):"""Return True if head inside boundaries."""return -200 < head.x < 190 and -200 < head.y < 190def 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()returnsnake.append(head)if head == food:print('Snake:', len(snake))food.x = randrange(-15, 15) * 10food.y = randrange(-15, 15) * 10else: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()
游戏演示:
2.吃豆人
👉游戏规则:用箭头导航控制黄色吃豆人吃掉所有白色食物,若被红色的鬼魂抓住,游戏结束。
from random import choice
from turtle import *from freegames import floor, vectorstate = {'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: ondef 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) / 20y = (180 - floor(point.y, 20)) / 20index = int(x + y * 20)return indexdef valid(point):"""Return True if point is valid in tiles."""index = offset(point)if tiles[index] == 0:return Falseindex = offset(point + 19)if tiles[index] == 0:return Falsereturn point.x % 20 == 0 or point.y % 20 == 0def 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 - 200y = 180 - (index // 20) * 20square(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] = 2state['score'] += 1x = (index % 20) * 20 - 200y = 180 - (index // 20) * 20square(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.xcourse.y = plan.yup()goto(point.x + 10, point.y + 10)dot(20, 'red')update()for point, course in ghosts:if abs(pacman - point) < 20:returnontimer(move, 100)def change(x, y):"""Change pacman aim if valid."""if valid(pacman + vector(x, y)):aim.x = xaim.y = ysetup(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()
游戏演示:
3.加农炮
👉游戏规则:点击屏幕发射炮弹。炮弹在它的路径上弹出蓝色气球。在气球穿过屏幕之前把它们全部弹出。
from random import randrange
from turtle import *from freegames import vectorball = vector(-200, -200)
speed = vector(0, 0)
targets = []def tap(x, y):"""Respond to screen tap."""if not inside(ball):ball.x = -199ball.y = -199speed.x = (x + 200) / 25speed.y = (y + 200) / 25def inside(xy):"""Return True if xy within screen."""return -200 < xy.x < 200 and -200 < xy.y < 200def 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.5if inside(ball):speed.y -= 0.35ball.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):returnontimer(move, 50)setup(420, 420, 370, 0)
hideturtle()
up()
tracer(False)
onscreenclick(tap)
move()
done()
游戏演示:
4.四子棋
👉 游戏规则:单击行可放置光盘。第一个垂直、水平或对角连接四张光盘的玩家获胜。
from turtle import *from freegames import lineturns = {'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 + 25y = count * 50 - 200 + 25up()goto(x, y)dot(40, player)update()rows[row] = count + 1state['player'] = turns[player]setup(420, 420, 370, 0)
hideturtle()
tracer(False)
grid()
onscreenclick(tap)
done()
游戏演示:
5. Fly Bird
👉 游戏规则:点击屏幕来拍打鸟的翅膀。飞过屏幕被黑色乌鸦碰到,游戏结束。
from random import *
from turtle import *from freegames import vectorbird = 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 < 200def 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 -= 5for ball in balls:ball.x -= 3if 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)returnfor ball in balls:if abs(ball - bird) < 15:draw(False)returndraw(True)ontimer(move, 50)setup(420, 420, 370, 0)
hideturtle()
up()
tracer(False)
onscreenclick(tap)
move()
done()
游戏演示:
6.记忆:数字对拼图游戏(欢迎挑战!用时:2min)
👉游戏规则:单击方格用于显示数字。匹配两个数字,方格将显示从而显示图像。
from random import *
from turtle import *from freegames import pathcar = path('car.gif')
tiles = list(range(32)) * 2
state = {'mark': None}
hide = [True] * 64def 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 - 200def 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'] = spotelse:hide[spot] = Falsehide[mark] = Falsestate['mark'] = Nonedef 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()
游戏演示:
7.乒乓球
👉游戏规则:用键盘上下移动划桨,谁先丢失球,谁输!(左ws上下,右ik上下)
from random import choice, random
from turtle import *from freegames import vectordef 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] += changedef 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.xy = ball.yup()goto(x, y)dot(10)update()if y < -200 or y > 200:aim.y = -aim.yif x < -185:low = state[1]high = state[1] + 50if low <= y <= high:aim.x = -aim.xelse:returnif x > 185:low = state[2]high = state[2] + 50if low <= y <= high:aim.x = -aim.xelse:returnontimer(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()
游戏演示:
8.上课划水必备-井字游戏(我敢说100%的人都玩过)
👉游戏规则:点击屏幕放置一个X或O。连续连接三个,就赢了!
from turtle import *from freegames import linedef 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 - 200state = {'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 playersetup(420, 420, 370, 0)
hideturtle()
tracer(False)
grid()
update()
onscreenclick(tap)
done()
游戏演示:
9.将数字滑动到位的拼图游戏
👉 游戏规则:单击靠近空正方形的方格以交换位置。将所有数字从左到右按顺序排列。
from random import *
from turtle import *from freegames import floor, vectortiles = {}
neighbors = [vector(100, 0),vector(-100, 0),vector(0, 100),vector(0, -100),
]def load():"""Load tiles and scramble."""count = 1for y in range(-200, 200, 100):for x in range(-200, 200, 100):mark = vector(x, y)tiles[mark] = countcount += 1tiles[mark] = Nonefor count in range(1000):neighbor = choice(neighbors)spot = mark + neighborif spot in tiles:number = tiles[spot]tiles[spot] = Nonetiles[mark] = numbermark = spotdef 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:returnelif 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 + neighborif spot in tiles and tiles[spot] is None:number = tiles[mark]tiles[spot] = numbersquare(spot, number)tiles[mark] = Nonesquare(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()
游戏演示:
10.迷宫(我己经晕了,你们来)
👉游戏规则:从一边移到另一边。轻触屏幕可跟踪从一侧到另一侧的路径。
from random import random
from turtle import *from freegames import linedef 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()
游戏演示:
获取更多
更多好玩小游戏,可以直接点击获取哦!!