Hai, yang di sana! Saya belajar peluang arduino. Dan saya memutuskan untuk menyalin game ular arcade klasik dari nokia lama saya. Jadi, ini dia.
Saya menggunakan matriks LED 16x16, joystick dan Arduino UNO. itu tidak mudah karena setiap led terhubung secara konsisten. Jadi, logika geraknya agak rumit.
Di sini Anda dapat mengontrol karakter ular. Makan beberapa makanan lezat, tumbuh dewasa, dan mati. Kode program siap untuk ditingkatkan.
Bersenang-senang dan nikmati. Jika Anda suka, jangan berpikir dua kali untuk berlangganan youtube dan instagram saya :) Mereka dalam bahasa Rusia, tetapi saya akan segera membuat subtitle.
Kode
KodeC/C++
#include //matrix settings#define NUM_LEDS 256#define DATA_PIN 3#define BRIGHTNESS 8//joystick settings#define pinX A2 // ось X ойстика#define pinY A1 // ось Y ойстика#define swPin 2 // опка ойстикаint ular[256]; // array elemen ularint snakeSize =2; // ukuran ular asli int snakeSpeed =500;int baris; // nomor barisint col; // nomor kolomint LastDirection =135; // mulai arah ke i, Arah baru, OlddX =1, OlddY, f;int merah, hijau, biru, fred, fgreen, fblue; //colorsCRGB leds[NUM_LEDS];void setup() { red =random(0, 255); hijau =acak(0, 255); biru =acak(0, 255); fred =acak(127, 255); fhijau =acak(127, 255); fbiru =acak(127, 255); Serial.begin(9600); pinMode(pinX, INPUT); pinMode(pinY, INPUT); pinMode(swPin, INPUT); digitalWrite(swPin, TINGGI); FastLED.addLeds(led, NUM_LEDS); FastLED.setBrightness(KECERAHAN); untuk( i=0; i<=255; i++ ){ ular[i] =0; } untuk( i=0; i<=Ular Ukuran; i++ ){ ular[i] =LastDirection+i; } f =acak(0, 255); FastLED.show();}int Snakedirection(int last, int dX, int dY ){ dX =map(dX, 0, 1000, -1, 1); dY =peta(dY, 0, 1000, -1, 1); if(dX ==0 &&dY ==0 &&OlddX !=dX){ dX =OlddX; } if(dY ==0 &&dX ==0 &&OlddY !=dY){ dY =OlddY; } int newDirection =terakhir; if( dX !=0 ){ // bergerak ke arah X if ( baris&1 ){ if( col ==0 &&dX ==1){ newDirection =last -15; } else if( col ==15 &&dX ==-1){ newDirection =last +15; } else newDirection =last + dX; // етная } else { if( col ==0 &&dX ==1){ newDirection =last +15; } else if( col ==15 &&dX ==-1 ){ newDirection =last -15; } else newDirection =last - dX; // е етная } } if( dY <0){ // bergerak ke Y arah BAWAH if(row ==15 &&dY ==-1){newDirection =col;} else if ( row&1 ){ newDirection =last + ( col*2)+1; // етная } else { newDirection =last + (16-col-1)+(16-col); // е етная } } if( dY> 0){ // bergerak ke arah Y UP if( baris ==0 &&dY ==1){ newDirection =255 - col;} else if ( baris&1 ){ newDirection =last - (terakhir - 16*baris) - (16 - col); // етная } else { newDirection =last - (col*2)-1; // е етная } } OlddX =dX; OlddY =dY; return newDirection;}int snakeMove(int snakeDirection){ for( i=0; i<=255; i++ ){ if( snake[i] ==snakeDirection ){ death(); } } FastLED.clear(); for(i=snakeSize; i>=1; i--){ ular[i] =ular[i-1]; } ular[0] =arah ular; untuk( i=0; i<=255; i++ ){ if( ular[i] ){ leds[ular[i]].setRGB(merah, hijau, biru); } } FastLED.show(); baris =(int)(snakeDirection/16); // nomor baris if ( baris&1 ){ col =(baris+1) * 16 - snakeDirection - 1; } else { col =snakeDirection - baris * 16; } return snakeDirection;}void food( int eat ){ if( eat ==f ){ snakeSize++; f =acak(0, 255); merah =fred; hijau =hijau; biru =biru; fred =acak(0, 255); fhijau =acak(0, 255); fbiru =acak(0, 255); kecepatan ular =kecepatan ular / 1.1; } else { leds[f].setRGB(fred, fgreen, fblue); FastLED.show(); }}kematian batal(){ ukuran ular =2; kecepatan ular =500; merah =255; hijau =0; biru =0; }warna kosong(boolean sw){ if(!sw){ red =random(0,255); hijau =acak (0,255); biru =acak (0,255); }}void loop() { warna( digitalRead(swPin) ); newDirection =Snakedirection(Arah terakhir, analogRead(pinX), analogRead(pinY)); lastDirection =snakeMove(newDirection); makanan (Arah baru); delay(snakeSpeed);}
Skema