Reputation: 321
I was wondering if someone could give me a detailed explanation on how to run a game/app developed using Pygame on an Android phone. I recently finished programming PacMan and it works perfectly on my computer, but I think it would be awesome if I could get it running on my phone. I tried following the instructions at http://pygame.renpy.org/android-packaging.html, but every time i run "import android" on the IDLE I get an error saying it did not find the module. Could someone clearly explain how to set up the android module?
Also, in my program I used code such as if (event.key == K_UP or event.key == K_w): direction = UP
. However there are no arrow keys on a phone. What code would I need to use to see if the user swiped the screen with their fingers from up -> down or left -> right, etc.
Upvotes: 32
Views: 85793
Reputation: 137
I have successfully ran a pygame
program on Android!
First, I debugged the app by saving the error to a file. I got error that on Android it can be run only using full-screen. I've created small app and got it working:
import sys, os
andr = None
try:
import android
andr = True
except ImportError:
andr = False
try:
import pygame
import sys
import pygame
import random
import time
from pygame.locals import *
pygame.init()
fps = 1 / 3
width, height = 640, 480
screen = pygame.display.set_mode((width, height), FULLSCREEN if andr else 0)
width, height = pygame.display.get_surface().get_size()
while True:
screen.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.flip()
time.sleep(fps)
except Exception as e:
open('error.txt', 'w').write(str(e))
Screenshot: https://i.sstatic.net/4qXPe.png
requirements in spec file:
requirements = python3,pygame
The APK's file size is only 12 megabytes.
Upvotes: 5
Reputation: 121
There is a pygame
subset for android. However this requires special reworking and changing the program. It shouldn't be too hard.
http://pygame.renpy.org/writing.html http://pygame.renpy.org/index.html
I cannot answer your second question, I am not experienced enough.
Upvotes: 12
Reputation: 39
I think the pygame subset for Android would be good but I don't trust its functionality. I use Kivy as it's cross platform. But, if you ever decide to use the pygame subset for Android, your tap of the screen of an Android device would be your mouse movement on the desktop. I am saying treat your tapping as the mouse. Good luck!
Upvotes: 3
Reputation: 6726
Python application into an Android APK - https://github.com/kivy/python-for-android/
Generic Python packager for Android and iOS - https://buildozer.readthedocs.io/en/latest/
Upvotes: 0
Reputation: 1
pygame.event has multiple touch-screen events. Here are some useful ones:
FINGERMOTION: touch_id, finger_id, x, y, dx, dy
FINGERDOWN: touch_id, finger_id, x, y, dx, dy
FINGERUP: touch_id, finger_id, x, y, dx, dy
MULTIGESTURE: touch_id, x, y, pinched, rotated, num_fingers
Upvotes: 0
Reputation: 11
For your second question, there is an answer in another website.
https://amp.reddit.com/r/Python/comments/2ak14j/made_my_first_android_app_in_under_5_hours_using/
it says You can try code like this
if android:
android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE)
I hope it will help you.
Upvotes: 1
Reputation: 29
There are some pretty good answers for your first part already so I won't answer that. (I came here looking into what to use for it too!)
However the second part of your question should be a lot easier.
Have a mouse object that on a mouse down event will save the coordinates of the touch to an MX and MY variable Then when the mouse up event is triggered takes the new coordinates and calculates a vector using the MX and MY and this new point ie. The distance and angle of the swipe. Use trigonometry or the math module for the angle (research arctan2).
You can then use this in an if, elif, else to determine what quadrant the angle was and the distance to determine whether the swipe was valid if it's greater than a certain value.
I'm on mobile so unfortunately I can't give an example, however I'm certain you're apt to work out the solution with this guidance.
Upvotes: 2