I startet to programm a tic tac toe game on the Matrix. But there are still some bugs and i haven´t an idea why .
Grid Design:
o o | o o | o o
o o | o o | o o
- - - - - - - -
o o | o o | o o
o o | o o | o o
- - - - - - - -
o o | o o | o o
o o | o o | o o
each sign is a Led.
My Code:
Code: Select all
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Include
#include <Adafruit_NeoPixel.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Define
#define Led 11
#define ButtonR 8
#define ButtonY 7
#define LedPlayer1 13 //blue
#define LedPlayer2 12 //green
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Setup NeoPixel
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, Led, NEO_GRB + NEO_KHZ800);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Variablen
//Color
//Game
int field[9] = {
0,0,0,0,0,0,0,0,0}; //1 = blue-player1, 2 = green-player2, 3 = yellow-cursor
int f = 0;
boolean player1 = HIGH;
boolean player2 = LOW;
int w = 0;
//Sonstige
int i;
int e = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Function
void grid(){
strip.setPixelColor(2, 10, 0, 0);
strip.setPixelColor(5, 10, 0, 0);
strip.setPixelColor(10, 10, 0, 0);
strip.setPixelColor(13, 10, 0, 0);
for( i=16; i<=23; i++){
strip.setPixelColor(i, 10, 0, 0);
}
strip.setPixelColor(26, 10, 0, 0);
strip.setPixelColor(29, 10, 0, 0);
strip.setPixelColor(34, 10, 0, 0);
strip.setPixelColor(37, 10, 0, 0);
for( i=40; i<=47; i++){
strip.setPixelColor(i, 10, 0, 0);
}
strip.setPixelColor(50, 10, 0, 0);
strip.setPixelColor(53, 10, 0, 0);
strip.setPixelColor(58, 10, 0, 0);
strip.setPixelColor(61, 10, 0, 0);
strip.show();
}
void show (int field[]){
//filed 1
if( field[0]==0 ){
strip.setPixelColor(0, 0, 0, 0);
strip.setPixelColor(1, 0, 0, 0);
strip.setPixelColor(8, 0, 0, 0);
strip.setPixelColor(9, 0, 0, 0);
}
if( field[0]==1 ){
strip.setPixelColor(0, 0, 0, 10);
strip.setPixelColor(1, 0, 0, 10);
strip.setPixelColor(8, 0, 0, 10);
strip.setPixelColor(9, 0, 0, 10);
}
if( field[0]==2 ){
strip.setPixelColor(0, 0, 10, 0);
strip.setPixelColor(1, 0, 10, 0);
strip.setPixelColor(8, 0, 10, 0);
strip.setPixelColor(9, 0, 10, 0);
}
if( field[0]==3 ){
strip.setPixelColor(0, 10, 10, 0);
strip.setPixelColor(1, 10, 10, 0);
strip.setPixelColor(8, 10, 10, 0);
strip.setPixelColor(9, 10, 10, 0);
}
//filed 2
if( field[1]==0 ){
strip.setPixelColor(3, 0, 0, 0);
strip.setPixelColor(4, 0, 0, 0);
strip.setPixelColor(11, 0, 0, 0);
strip.setPixelColor(12, 0, 0, 0);
}
if( field[1]==1 ){
strip.setPixelColor(3, 0, 0, 10);
strip.setPixelColor(4, 0, 0, 10);
strip.setPixelColor(11, 0, 0, 10);
strip.setPixelColor(12, 0, 0, 10);
}
if( field[1]==2 ){
strip.setPixelColor(3, 0, 10, 0);
strip.setPixelColor(4, 0, 10, 0);
strip.setPixelColor(11, 0, 10, 0);
strip.setPixelColor(12, 0, 10, 0);
}
if( field[1]==3 ){
strip.setPixelColor(3, 10, 10, 0);
strip.setPixelColor(4, 10, 10, 0);
strip.setPixelColor(11, 10, 10, 0);
strip.setPixelColor(12, 10, 10, 0);
}
//filed 3
if( field[2]==0 ){
strip.setPixelColor(6, 0, 0, 0);
strip.setPixelColor(7, 0, 0, 0);
strip.setPixelColor(14, 0, 0, 0);
strip.setPixelColor(15, 0, 0, 0);
}
if( field[2]==1 ){
strip.setPixelColor(6, 0, 0, 10);
strip.setPixelColor(7, 0, 0, 10);
strip.setPixelColor(14, 0, 0, 10);
strip.setPixelColor(15, 0, 0, 10);
}
if( field[2]==2 ){
strip.setPixelColor(6, 0, 10, 0);
strip.setPixelColor(7, 0, 10, 0);
strip.setPixelColor(14, 0, 10, 0);
strip.setPixelColor(15, 0, 10, 0);
}
if( field[2]==3 ){
strip.setPixelColor(6, 10, 10, 0);
strip.setPixelColor(7, 10, 10, 0);
strip.setPixelColor(14, 10, 10, 0);
strip.setPixelColor(15, 10, 10, 0);
}
//filed 4
if( field[3]==0 ){
strip.setPixelColor(24, 0, 0, 0);
strip.setPixelColor(25, 0, 0, 0);
strip.setPixelColor(32, 0, 0, 0);
strip.setPixelColor(33, 0, 0, 0);
}
if( field[3]==1 ){
strip.setPixelColor(24, 0, 0, 10);
strip.setPixelColor(25, 0, 0, 10);
strip.setPixelColor(32, 0, 0, 10);
strip.setPixelColor(33, 0, 0, 10);
}
if( field[3]==2 ){
strip.setPixelColor(24, 0, 10, 0);
strip.setPixelColor(25, 0, 10, 0);
strip.setPixelColor(32, 0, 10, 0);
strip.setPixelColor(33, 0, 10, 0);
}
if( field[3]==3 ){
strip.setPixelColor(24, 10, 10, 0);
strip.setPixelColor(25, 10, 10, 0);
strip.setPixelColor(32, 10, 10, 0);
strip.setPixelColor(33, 10, 10, 0);
}
//filed 5
if( field[4]==0 ){
strip.setPixelColor(27, 0, 0, 0);
strip.setPixelColor(28, 0, 0, 0);
strip.setPixelColor(35, 0, 0, 0);
strip.setPixelColor(36, 0, 0, 0);
}
if( field[4]==1 ){
strip.setPixelColor(27, 0, 0, 10);
strip.setPixelColor(28, 0, 0, 10);
strip.setPixelColor(35, 0, 0, 10);
strip.setPixelColor(36, 0, 0, 10);
}
if( field[4]==2 ){
strip.setPixelColor(27, 0, 10, 0);
strip.setPixelColor(28, 0, 10, 0);
strip.setPixelColor(35, 0, 10, 0);
strip.setPixelColor(36, 0, 10, 0);
}
if( field[4]==3 ){
strip.setPixelColor(27, 10, 10, 0);
strip.setPixelColor(28, 10, 10, 0);
strip.setPixelColor(35, 10, 10, 0);
strip.setPixelColor(36, 10, 10, 0);
}
//filed 6
if( field[5]==0 ){
strip.setPixelColor(30, 0, 0, 0);
strip.setPixelColor(31, 0, 0, 0);
strip.setPixelColor(38, 0, 0, 0);
strip.setPixelColor(39, 0, 0, 0);
}
if( field[5]==1 ){
strip.setPixelColor(30, 0, 0, 10);
strip.setPixelColor(31, 0, 0, 10);
strip.setPixelColor(38, 0, 0, 10);
strip.setPixelColor(39, 0, 0, 10);
}
if( field[5]==2 ){
strip.setPixelColor(30, 0, 10, 0);
strip.setPixelColor(31, 0, 10, 0);
strip.setPixelColor(38, 0, 10, 0);
strip.setPixelColor(39, 0, 10, 0);
}
if( field[5]==3 ){
strip.setPixelColor(30, 10, 10, 0);
strip.setPixelColor(31, 10, 10, 0);
strip.setPixelColor(38, 10, 10, 0);
strip.setPixelColor(39, 10, 10, 0);
}
//filed 7
if( field[6]==0 ){
strip.setPixelColor(48, 0, 0, 0);
strip.setPixelColor(49, 0, 0, 0);
strip.setPixelColor(56, 0, 0, 0);
strip.setPixelColor(57, 0, 0, 0);
}
if( field[6]==1 ){
strip.setPixelColor(48, 0, 0, 10);
strip.setPixelColor(49, 0, 0, 10);
strip.setPixelColor(56, 0, 0, 10);
strip.setPixelColor(57, 0, 0, 10);
}
if( field[6]==2 ){
strip.setPixelColor(48, 0, 10, 0);
strip.setPixelColor(49, 0, 10, 0);
strip.setPixelColor(56, 0, 10, 0);
strip.setPixelColor(57, 0, 10, 0);
}
if( field[6]==3 ){
strip.setPixelColor(48, 10, 10, 0);
strip.setPixelColor(49, 10, 10, 0);
strip.setPixelColor(56, 10, 10, 0);
strip.setPixelColor(57, 10, 10, 0);
}
//filed 8
if( field[7]==0 ){
strip.setPixelColor(51, 0, 0, 0);
strip.setPixelColor(52, 0, 0, 0);
strip.setPixelColor(59, 0, 0, 0);
strip.setPixelColor(60, 0, 0, 0);
}
if( field[7]==1 ){
strip.setPixelColor(51, 0, 0, 10);
strip.setPixelColor(52, 0, 0, 10);
strip.setPixelColor(59, 0, 0, 10);
strip.setPixelColor(60, 0, 0, 10);
}
if( field[7]==2 ){
strip.setPixelColor(51, 0, 10, 0);
strip.setPixelColor(52, 0, 10, 0);
strip.setPixelColor(59, 0, 10, 0);
strip.setPixelColor(60, 0, 10, 0);
}
if( field[7]==3 ){
strip.setPixelColor(51, 10, 10, 0);
strip.setPixelColor(52, 10, 10, 0);
strip.setPixelColor(59, 10, 10, 0);
strip.setPixelColor(60, 10, 10, 0);
}
//filed 9
if( field[8]==0 ){
strip.setPixelColor(54, 0, 0, 0);
strip.setPixelColor(55, 0, 0, 0);
strip.setPixelColor(62, 0, 0, 0);
strip.setPixelColor(63, 0, 0, 0);
}
if( field[8]==1 ){
strip.setPixelColor(54, 0, 0, 10);
strip.setPixelColor(55, 0, 0, 10);
strip.setPixelColor(62, 0, 0, 10);
strip.setPixelColor(63, 0, 0, 10);
}
if( field[8]==2 ){
strip.setPixelColor(54, 0, 10, 0);
strip.setPixelColor(55, 0, 10, 0);
strip.setPixelColor(62, 0, 10, 0);
strip.setPixelColor(63, 0, 10, 0);
}
if( field[8]==3 ){
strip.setPixelColor(54, 10, 10, 0);
strip.setPixelColor(55, 10, 10, 0);
strip.setPixelColor(62, 10, 10, 0);
strip.setPixelColor(63, 10, 10, 0);
}
strip.show();
}
int winner(int field[]){
if( field[0]==field[1] && field[1]==field[2] ){
return field[0];
}
if( field[3]==field[4] && field[4]==field[5] ){
return field[3];
}
if( field[6]==field[7] && field[7]==field[8] ){
return field[6];
}
if( field[0]==field[3] && field[3]==field[6] ){
return field[0];
}
if( field[1]==field[4] && field[4]==field[7] ){
return field[1];
}
if( field[2]==field[5] && field[5]==field[8] ){
return field[2];
}
if( field[0]==field[4] && field[4]==field[8] ){
return field[0];
}
if( field[2]==field[4] && field[4]==field[6] ){
return field[2];
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Setup
void setup() {
pinMode(ButtonR,INPUT);
pinMode(ButtonY,INPUT);
pinMode(LedPlayer1,OUTPUT);
pinMode(LedPlayer2,OUTPUT);
strip.begin();
strip.show(); //Initilize all pixel to off
grid();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Main
void loop() {
if( player1 == HIGH ){
digitalWrite(LedPlayer1,HIGH);
digitalWrite(LedPlayer2,LOW);
}
if( player2 == HIGH){
digitalWrite(LedPlayer1,LOW);
digitalWrite(LedPlayer2,HIGH);
}
//Cursor
if( digitalRead(ButtonY)==HIGH ){
delay(200);
for( i=0 ; i<=8 ; i++){
if( field[i]==3 ){
field[i] = 0;
}
}
do{
f++;
if( f==10 ){
f = 1;
}
if( field[f-1]==0 ){
field[f-1] = 3;
e++;
}
else{
e = 0;
}
}
while(e==0);
e = 0;
show(field);
}
//Red Button
if(digitalRead(ButtonR)==HIGH && f!=0 ){
delay(200);
for( i=0 ; i<=8 ; i++){
if( field[i]==3 ){
field[i] = 0;
}
}
if( player1==HIGH ){
field[f-1] = 1;
}
if( player2==HIGH ){
field[f-1] = 2;
}
player1 = !player1;
player2 = !player2;
f = 0;
show(field);
}
//Winner
w = winner(field);
if( w==1 ){
for( i=0 ; i<=63 ; i++){
strip.setPixelColor(i, 0, 0, 20);
}
strip.show();
delay(1000);
for( i=0 ; i<=8 ; i++){
field[i] = 0;
}
show(field);
grid();
}
if( w==2 ){
for( i=0 ; i<=63 ; i++){
strip.setPixelColor(i, 0, 20, 0);
strip.show();
delay(1000);
for( i=0 ; i<=8 ; i++){
field[i] = 0;
}
show(field);
grid();
}
}
}
When the top/left field is market in green and the below/right filed in blue and you jump with the "cursor" in the center field it says blue won. Same bug if the top/left field is blue and the below/right field ist green then it says green won.
Next bug is when de below row is complete blue, blue also wins, it dosen´t say that blue is the winner.