P2E-FAST-GAME

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Page-under-construction.pngPage(s) en cours de traduction/élaboration.

Page(s) under translation/construction

Fast Game

Ce jeu du plus rapide se joue à deux joueurs.

Le but de chaque joueur étant de presser le plus rapidement possible son bouton une fois que le signal sonore est émis.

La LED du vainqueur clignotera avec un petite mélodie de victoire.

 

A noter que si un joueur presse son bouton avant le signal sonore alors ce dernier est automatiquement perdant (accompagné d'une petite mélodie funèbre).

Déroulement d'une partie

Le déroulement d'une partie est décrit par le diagramme ci-dessous:

 

Brancher

Réaliser les branchements suivants:

Pico Pico-2-Explorer
GP28 LED Rouge
GP27 Led Orange
GP26 LED Verte
GP21 Bouton 3
GP20 Bouton 2
GP19 Bouton 1
GP13 Buzzer

 

Code

Le script [fastgame.py]() est disponible dans le dépôt dédié au Pico-2-Explorer.

Ce dernier est repris-ci dessous avec quelques commentaire sur son fonctionnement.

from micropython import const
from random import randint
from machine import Pin
from rtplay import *
import time

START_SONG = "Counter Strike - Time Bomb : d=4,o=5,b=100:16c#7,8p,16c#7,8p,16c#7,8p,16c#7"
WIN_SONG = "Black Robb - Whoa : d=4,o=5,b=100:16g,16p,16g6,16a#6,16a6,16a#6,16g6,16p,16g,16p,16g6,16a#6,16a6,16a#6,16g6"
LOOSE_SONG = "dark:d=4,o=5,b=140:8f#6,8e6,2f#6,16e6,16d#6,16d6,16b,a#,1b" 

class Blinky:
	""" Just handle LED with blink state """
	FIXED = const( 0 )
	BLINK_SLOW = const( 500 ) # 500 ms
	BLINK_FAST = const( 200 ) # 200 ms

	def __init__( self, pin ):
		self.pin = pin
		self.off()

	def on( self ):
		self.interval = self.FIXED
		self.last_update = time.ticks_ms()
		self.pin.value( True )

	def off( self ):
		self.interval = self.FIXED
		self.last_update = time.ticks_ms()
		self.pin.value( False )

	def blink( self, fast=False ):
		self.interval = self.BLINK_FAST if fast else self.BLINK_SLOW
		self.last_update = time.ticks_ms() 
		self.pin.value( True )
		

	def update( self ):
		if self.interval == self.FIXED:
			return
		if time.ticks_diff( time.ticks_ms(), self.last_update ) < self.interval:
			return
		self.pin.toggle()
		self.last_update = time.ticks_ms()


# === Player 1 / Joueur 1 =================================
led1 = Blinky( Pin( Pin.board.GP28, Pin.OUT ) )
btn1 = Pin( Pin.board.GP19, Pin.IN, Pin.PULL_UP )
first_btn1 = None # first time btn1 was pressed
def btn1_pressed( obj ):
	global first_btn1
	if first_btn1==None:
		first_btn1 = time.ticks_ms()
btn1.irq( trigger=Pin.IRQ_FALLING, handler=btn1_pressed )

# === Player 2 / Joueur 2 =================================
led2 = Blinky( Pin( Pin.board.GP22, Pin.OUT ) ) # <<<<<<<<<<<<<<<<<<<<<<<<<<< GP26
btn2 = Pin( Pin.board.GP21, Pin.IN, Pin.PULL_UP )
first_btn2 = None
def btn2_pressed( obj ):
	global first_btn2
	if first_btn2==None:
		first_btn2 = time.ticks_ms()
btn2.irq( trigger=Pin.IRQ_FALLING, handler=btn2_pressed )

# === Other / Autre =======================================
# Start / Demarrer
btn_start = Pin( Pin.board.GP20, Pin.IN, Pin.PULL_UP )
# LED status / LED de Status
led_status = Blinky( Pin( Pin.board.GP27, Pin.OUT ) )
# Buzzer
buzzer = RingTonePlayer( Pin.board.GP13 )

# === Game / Jeux =========================================

# Start  ---> 
# buzzer.play_str( START_SONG ) 
# buzzer.play_str( WIN_SONG ) 
# buzzer.play_str( LOOSE_SONG ) 

# Start Button ? / Boutons Start ?
led_status.blink()
while btn_start.value()==1:
	led_status.update()
	time.sleep_ms(20)
led_status.off()

while True:
	# All LEDs on / Toutes LEDs allumées 
	led1.on()
	led2.on()
	led_status.on()

	# Init round / initialisation round
	wait_ms = randint( 3, 10 )*1000
	first_btn1 = None
	first_btn2 = None
	buzzer.play_str( START_SONG )

	# The round is starting / debut du round
	led1.off()
	led2.off()
	led_status.off()

	# Wait loop
	start_ms = time.ticks_ms()
	_led = None
	while time.ticks_diff( time.ticks_ms(), start_ms ) < wait_ms:
		time.sleep_ms(100)
		if (first_btn1!=None) or (first_btn2!=None):
			_led = led1 if first_btn1!= None else led2
			_led.on()
			buzzer.play_str( LOOSE_SONG ) # End of game
			break

	# Still running the game ? / Le jeux continue encore ?
	if (first_btn1==None) and (first_btn2==None):
		# Go Signal 
		buzzer.play_tone( 2500, 500 )

		# Wait the first player to press a button
		# Attendre le premier joueur qui presse son bouton
		while (first_btn1==None) and (first_btn2==None):
			time.sleep_ms( 20 )

		# We have a Winnner / Nous avons un gagnant
		if first_btn1==None:
			_led = led2
		elif first_btn2==None:
			_led = led1
		else:
			_led = led1 if first_btn1<first_btn2 else led2
		_led.on()
		buzzer.play_str( WIN_SONG )

	_led.blink()

	# Start Button ? / Boutons Start ?
	while btn_start.value()==1:
		_led.update()
		time.sleep_ms(20)
	_led.off()

Un problème?

xxx



Traduction augmentée réalisée par Meurisse. D pour shop.MCHobby.be - Licence CC-BY-SA.


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.