nlz-it.net: Random IT stuff

Welcome to nlz-it.net
just a random IT blog.

GIB MIR DEIN GELD

If you like, support me ;-)

Wem die Seite gefällt,
kurz auf die Werbung klicken.
(AddBlocker Deaktivieren natürlich)

 

RaspberryPi with SenseHat on top
RaspberryPi with SenseHat on top

Da berühmte Klassiker Snake. In Python with love for Raspi ;-)

Hinweis: Die live Animation von der Plattform trinket.io funktioniert nur mit den Browser Chrome oder Safari.

Die Snake wird mit den verbauten Joystick gesteuert. Es gibt keine Wände, es kann also einfach über den Rand hinaus sich bewegt werden. Der Sensehat hat ein 8x8 LED Bild, also 64 Felder gesamt. Die Snake ist zu beginn 2 Felder lang, darauf resultiert die maximale Punktzahl von 62. Der Rest ist getreu dem Motto: Keep it simple, das gesamte Spiel kommt somit mit 99 Zeile aus ;-) ...

But First: Der Code:

from random import randint
from sense_hat import SenseHat, ACTION_RELEASED
import time

sense = SenseHat()
lastDirection='left';
red = (255, 0, 0);
green = (0, 255, 0);
blue = (0, 0, 255);
off= (0,0,0);
points=0;
sense.clear();

def newFruit():
	global snake;
	global fruit;
	newFindFruit = True;
	while newFindFruit:
		x = randint(0, 7);
		y = randint(0, 7);
		fruit = Point(x,y);
		if not checkIfPointInside(snake, fruit, 0):
			newFindFruit = False;
	sense.set_pixel(x, y, blue)

def checkIfPointInside(snake, point, startIndex):
	for index in range(startIndex,len(snake)):
		if snake[index].x_pos == point.x_pos and snake[index].y_pos == point.y_pos:
			return True;
	return False;

class Point:
	global lastDirection;
	global gamePad;

	def __init__(self, x,y):
		self.x_pos=x;
		self.y_pos=y;
		sense.set_pixel(self.x_pos, self.y_pos, green)

	def updateFirstPoint(self):
		if lastDirection =='left':
			self.x_pos = (self.x_pos-1) % 8;
		elif lastDirection =='right':
			self.x_pos = (self.x_pos+1) % 8;
		elif lastDirection =='down':
			self.y_pos = (self.y_pos+1) % 8;
		elif lastDirection =='up':
			self.y_pos = (self.y_pos-1) % 8;
		self.pointOn(red);
	def pointOff(self):
		sense.set_pixel(self.x_pos, self.y_pos, off)

	def pointOn(self, color):
		sense.set_pixel(self.x_pos, self.y_pos, color)

gameOver = False;
snake = [Point(4,4),Point(5,4)]
newFruit();
while True:
	while not gameOver:
		for event in sense.stick.get_events():
			if event.action == ACTION_RELEASED:
				if event.direction == 'left' and lastDirection != 'right':
					lastDirection = event.direction;
				elif event.direction == 'right' and lastDirection != 'left':
					lastDirection = event.direction;
				elif event.direction == 'up' and lastDirection != 'down':
					lastDirection = event.direction;
				elif event.direction == 'down' and lastDirection != 'up':
					lastDirection = event.direction;

		for index in range ((len(snake)-1),0,-1):
			if index == (len(snake)-1):
				snake[index].pointOff();
			snake[index].x_pos=snake[index-1].x_pos;
			snake[index].y_pos=snake[index-1].y_pos;
			snake[index].pointOn(green);
		snake[0].updateFirstPoint();
		if checkIfPointInside(snake, snake[0], 1):
			sense.show_message("GameOver, Points: %d" %(points), text_colour=[200, 0, 200])
			gameOver=True;
			points=0;
		if snake[0].x_pos == fruit.x_pos and snake[0].y_pos == fruit.y_pos:
			snake.append(Point( snake[len(snake)-1].x_pos, snake[len(snake)-1].y_pos))
                        points +=1;
                        if points < 62 :
                            newFruit();
                        if points >= 62:
                            gameOver=True;
                            sense.show_message("GameOver, Points: %d" %(points), text_colour=[200,0,200]);
                            points=0;
		time.sleep(0.5);
	time.sleep(1.0);
	for event in sense.stick.get_events():
		if event.action == ACTION_RELEASED and event.direction == 'middle':
			gameOver=False;
			snake = [Point(4,4),Point(5,4)]
			newFruit();

 

Und wer will die Live Demo, Steuerung mit den Pfeiltasten. Nach GameOver starte neues Spiel mit Enter-Taste:-)

 

 

Zum Seitenanfang
JSN Boot template designed by JoomlaShine.com
Wir benutzen Cookies

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.