Kinvert made another custom game using the Anki Vector SDK. This time we made it so you can play a game of pong against Vector. Good luck beating him.
Copy and paste the code in this article to the Anki Vector SDK to play this game.
If you want to learn Python, Cozmo and Vector are great choices. One of our popular articles is Cozmo vs Vector.
Kinvert has a lot of other Vector Coding Examples.
Playing Pong With Vector
This time we programmed Vector to play pong against us. Vector controls the red paddle, while we control the blue paddle by touching his back.
Pong Commands – Pongmands
Time to take a look at some of the pongmands:
- for loops
- PIL ellipse
- PIL rectangle
Though beginners might not fully understand this code, don’t let that worry you.
First, we’re making an online course!
Second, you can just copy and paste the code to run it in the SDK.
The Code That Makes the Ball Bounce
The code for this game is pretty long. I won’t have time to write the more full explanation like I usually do.
Long story short:
We make an X and Y velocity and position for the ball. These values will change depending on bounces off walls and paddles.
Vector is OP at the moment and is practically unbeatable. I might program in different logic for Vector to play with. For now, prepare to get pongslaughtered.
""" Copyright Kinvert All Rights Reserved If you would like to use this code for business or education please contact us for permission at: www.kinvert.com/ Free for personal use """ import anki_vector from anki_vector.util import degrees import random import sys import time try: from PIL import Image, ImageDraw except ImportError: sys.exit("Cannot import from PIL. Do `pip3 install --user Pillow` to install") def npc_vector(bx,by,bvx,bvy): return by + random.randint(-5,5) def draw_face(x, y, bx, by, px, py, vx, vy): dimensions = (184, 96) face_image = Image.new( 'RGBA', dimensions, (0, 0, 0, 255)) dc = ImageDraw.Draw(face_image) dc.ellipse([bx-5, by-5, bx+5, by+5], fill=(255, 255, 0, 255)) dc.rectangle([px-3, py-10, px, py+10], fill=(0, 0, 255, 255)) dc.rectangle([vx+3, vy-10, vx, vy+10], fill=(255, 0, 0, 255)) return face_image def impact(bx,by,bvx,bvy,paddleY): if abs(paddleY-by) < 10: bvx = bvx * -1 bvy += (0.5 * (by - paddleY)) if abs(bvy) < 0.2: bvy = 0.5 bvx = bvx * 1.1 return bvx, bvy args = anki_vector.util.parse_command_args() with anki_vector.Robot(args.serial) as robot: robot.behavior.set_head_angle(degrees(45.0)) robot.say_text("Don't touch me yet") untouchTotal = 0 for i in range(20): untouchTotal += robot.touch.last_sensor_reading.raw_touch_value untouched = untouchTotal/20.0 time.sleep(1.0) robot.say_text("touch my whole back") while not robot.touch.last_sensor_reading.is_being_touched: time.sleep(0.1) time.sleep(1.0) touchTotal = 0 for i in range(20): touchTotal += robot.touch.last_sensor_reading.raw_touch_value touched = touchTotal/20.0 diff = touched - untouched robot.say_text("OK you can stop. Get ready. You are blue.") over = 0 bx = 90 by = 40 bvx = -5 bvy = -1 px = 10 vx = 173 while not over: py = 95 * ( (robot.touch.last_sensor_reading.raw_touch_value - untouched) / diff ) vy = npc_vector(bx,by,bvx,bvy) if by <= 0: bvy = bvy * -1 if by > 95: bvy = bvy * -1 if bx <= px and bx >= 0: bvx, bvy = impact(bx,by,bvx,bvy,py) if bx >= vx and bx <= 183: bvx, bvy = impact(bx,by,bvx,bvy,vy) bx += bvx by += bvy if bx < 0: robot.say_text("I win") over = 1 elif bx > 183: robot.say_text("You win") over = 1 face_image = draw_face(0, 0, bx, by, px, py, vx, vy) screen_data = anki_vector.screen.convert_image_to_screen_data( face_image) robot.screen.set_screen_with_image_data( screen_data, 0.1, interrupt_running=True) if bvx < 0 and bx < 90: time.sleep(0.1) else: time.sleep(0.01)
Python Code Improvements
Currently Vector is more OP than Legolas. How could we make him capable of losing?
What could we do to make the controls a bit more intuitive and smooth?
How could we keep score?
Also I look forward to when the SDK supports sound effects. That will make the game a lot more fun.
What would you do to make Vector rub it in when he inevitably stomps you at Pong?
Let Me Bounce These Other Ideas Off You
Want to know when the newest games come out? You won’t regret subscribing to our super duper mailing list. You can unsubscribe at any time. Just please don’t do it on my birthday.
Hope this game was useful and fun. Please let us know what you think in the comments 🙂