(2학기) 캡스톤 디자인 2
Comment :
공주대학교 2013학년도 2학기 3학년 캡스톤디자인2 수업과제물로 만들었던 아두이노 게임 '몬스터 팡팡'입니다.
아두이노 메가, LED버튼센서, 도트 매트릭스, 부저 센서, 7-Segment 등을 이용하여 만들었으며, LED가 들어온 버튼을 누르는
두더지잡기의 벤치마킹 게임입니다. LED 버튼이 몬스터라는 설정이지요. ^^
총 3명이 팀을 이루어 만들었고, 저는 아두이노 프로그래밍과 선정리 일부를 담당하였습니다.
(전공이 그래픽인데, 팀원 중에 프로그래밍을 할 줄 아는 사람이 없어서 그나마 조금 할 줄 아는 제가 인터넷을 찾아가며 했습니다. 하하)
어려웠던 점은 아두이노 코딩의 경우, 일반 게임엔진이나 프로그램들과 다르게 객체별로 스크립트를 달 수가 없이 하나의 loop문에 모든
코드를 써야하기 때문에 delay를 걸어주면 전체 게임진행에 delay가 걸리며, 순차적으로 스크립트를 실행해서 버튼 입력이 잘 받아지지
않는다는 점, 배경음악을 넣으면 멜로디 실행과 게임진행이 꼬인다는 점 등이 있었습니다.
이를 해결하기 위해서 버튼입력을 받는 코드는 여러군데에 넣어주었으며, 배경음악은 제거하고, 게임시작, 종료 시에만 출력되게 하였습니다.
아래는 아두이노 코드의 원본입니다 :)
(파일로 첨부하려 했으나, 무단도용의 우려가 있어 원문에 붙여넣었습니다.)
#include <Wire.h>
#include "pitches.h"
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_8x8matrix matrix = Adafruit_8x8matrix();
int lose[] =
{
NOTE_B3, NOTE_A3, NOTE_B3, NOTE_B3, NOTE_E3, NOTE_G3, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_A3, NOTE_G3, NOTE_A3, NOTE_B3, 0,
NOTE_B3, NOTE_A3, NOTE_B3, NOTE_B3, NOTE_F3, NOTE_C4, NOTE_B3, NOTE_G3, NOTE_G3, NOTE_A3
};
int loseDurations[] =
{
2, 16, 16, 4, 4, 8, 16, 4, 4, 16, 16, 4, 4, 4,
2, 16, 16, 4, 2, 4, 4, 4, 4, 2
};
int victory[] =
{
NOTE_G3, NOTE_G3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_E4, NOTE_D4, 0,
NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_C4, NOTE_D4,0,
NOTE_G3, NOTE_G3, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4,
NOTE_F4, NOTE_E4,0,NOTE_E4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B3, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, 0
};
int victoryDurations[] =
{
20,16,4,16,16,16,16,16,4,8,
20,16,8,20,16,16,16,16,16,4,8,
20,16,4,16,16,16,16,16,4,
16,16,8,8,4,16,16,16,16,16,8,16,32,8,8
};
int gameScene = 0; // 0=start, 1=ready, 2=play 3=ending
int openingDot = 0; // control dot matrix animation
int endingDot = 0;
int heartDot = 0;
int victoryNote = 0;
int loseNote = 0;
int player_hp = 3;
int number = 0; //7segment 1 score position
int ten = 0; ///7segment 10 score position
//m1_response value 0~100 : led off, value 0 ~ -100 : led on
int m1_response = random(50,200); //monster led response
int m2_response = random(50,200);
int m3_response = random(50,200);
int m4_response = random(50,200);
int m5_response = random(50,200);
int m6_response = random(50,200);
int m7_response = random(50,200);
int m8_response = random(50,200);
//virtual button for pretend continual botton input
int vb1 = 0;
int vb2 = 0;
int vb3 = 0;
int vb4 = 0;
int vb5 = 0;
int vb6 = 0;
int vb7 = 0;
int vb8 = 0;
int svb = 0; // control start button
int b_start = 0;
void turn_all_off_1(){// turn all of 7 segment
for (int i = 22; i < 30; i++)
{
digitalWrite(i, LOW);
}
}
void turn_all_off_10(){// turn all of 7 segment
for (int i = 30; i < 38; i++)
{
digitalWrite(i, LOW);
}
}
void turn_all_off_life(){// turn all of 7 segment
for (int i = 38; i < 46; i++)
{
digitalWrite(i, LOW);
}
}
//hit sound
int hitEffect[] =
{
NOTE_B3, NOTE_B4
};
int hitDurations[] =
{
32, 32
};
//matrix setup
static const uint8_t PROGMEM
ready1_bmp[] = //ready
{ B00001000,
B00010000,
B01100000,
B01100000,
B10000000,
B00011110,
B00010010,
B11111111 },
ready2_bmp[] =
{ B00000000,
B00000000,
B00100000,
B11111110,
B00100000,
B00011110,
B00010010,
B11111111 },
ready3_bmp[] =
{ B00000000,
B00000000,
B10000000,
B01100000,
B01100000,
B00010000,
B00001000,
B11111111 },
go_bmp[] = //gogo
{ B00000000,
B11101110,
B10001010,
B11101010,
B10101010,
B11101110,
B00100000,
B00000000 },
oh_bmp[] = //oh
{ B00000000,
B11101010,
B10101010,
B10101110,
B10101010,
B11101010,
B00000000,
B00000000 },
over_bmp[] = //skull
{ B00111100,
B01111110,
B10011001,
B10011001,
B11100111,
B01111110,
B00111100,
B00100100 },
hit_bmp[] = //hit
{ B00000000,
B10100111,
B10100010,
B11101010,
B10101010,
B10101010,
B00000000,
B00000000 },
empty_bmp[] = //empty
{ B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000,
B00000000 },
heart_bmp[] = //heart
{ B00000000,
B01100110,
B11111111,
B11111111,
B01111110,
B00111100,
B00011000,
B00000000 };
//monster1 kill function
void kill1(int x, int y, int z, int a){ // x == m1_response, y == m1_input, z == vb1, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb1 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(100);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m1_response = random(50,200);
vb1 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
//mosnter 2 kill function
void kill2(int x, int y, int z, int a){ // x == m2_response, y == m2_input, z == vb2, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb2 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(100);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m2_response = random(50,200);
vb2 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
//mosnter 3 kill function
void kill3(int x, int y, int z, int a){ // x == m3_response, y == m3_input, z == vb3, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb3 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(100);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m3_response = random(50,200);
vb3 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
// monster 4 kill function
void kill4(int x, int y, int z, int a){ // x == m4_response, y == m4_input, z == vb4, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb4 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(50);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m4_response = random(50,200);
vb4 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
// monster 5 kill function
void kill5(int x, int y, int z, int a){ // x == m5_response, y == m5_input, z == vb5, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb5 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(50);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m5_response = random(50,200);
vb5 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
//monster 6 kill function
void kill6(int x, int y, int z, int a){ // x == m6_response, y == m6_input, z == vb6, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb6 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(100);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m6_response = random(50,200);
vb6 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
// monster 7 kill function
void kill7(int x, int y, int z, int a){ // x == m7_response, y == m7_input, z == vb7, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb7 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(100);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m7_response = random(50,200);
vb7 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
// monster 8 kill function
void kill8(int x, int y, int z, int a){ // x == m8_response, y == m8_input, z == vb8, a == digital number
/* if(x > 0 && x < 500){ //if player push monster button when monster led off state and vb1 is 0,
if(y == 1023){ //player life minus 1 and set vb1 to 1, so don't input button value continual
if(z == 0){
//playing hit effect
sound_effect();
player_hp -= 1;
vb8 = 1;
matrix.clear();
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(100);
matrix.clear();
}
}
}*/
if(x < 0 && x > -100){ //if player push monster button when monster led on state and vb1 is 0,
if(y == 1023){ //score number plus 1 and set vb1 to 1, so don't input button value continual.
if(z == 0){ //also monster led off and set m1_respose value random
//playing hit effect
sound_effect();
digitalWrite(a,LOW);
m8_response = random(50,200);
vb8 = 1;
number += 1;
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
matrix.clear();
matrix.drawBitmap(0, 0, hit_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
}
}
}
}
void dot_gogo(){ //print gogo on dot matrix
matrix.clear();
matrix.drawBitmap(0, 0, go_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(500);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(500);
}
void sound_effect(){
int noteDuration = 4000 / hitDurations[0]; // buzz twice
int noteDuration2 = 4000 / hitDurations[1];
tone(11, hitEffect[0], noteDuration); // buzz first
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(11);
tone(11, hitEffect[1], noteDuration2); // buzz second
int pauseBetweenNotes2 = noteDuration2 * 1.30;
delay(pauseBetweenNotes2);
noTone(11);
}
//digital 20,21pin : dot matrix, digital 11pin bgm buzzer, digital 12pin effect buzzer
void setup(){
matrix.begin(0x70);
Serial.begin(9600);
for (int i = 2; i < 10; i++){ // 2pin:start button, 3~10pin:monster button led
pinMode(i, OUTPUT);
}
for (int i = 22; i < 46; i++){ // 22pin~46pin 7-segment digital pin
pinMode(i, OUTPUT);
}
}
void loop(){
//button analog settings
if(svb == 0){ //receive start button value only start scene
b_start = analogRead(A0); //start button
}
int m1_input = analogRead(A1); //monster button input
int m2_input = analogRead(A2);
int m3_input = analogRead(A3);
int m4_input = analogRead(A4);
int m5_input = analogRead(A5);
int m6_input = analogRead(A6);
int m7_input = analogRead(A7);
int m8_input = analogRead(A8);
// Game Start menu
if(gameScene == 0){
digitalWrite(2,HIGH); //start button led on
//'ready' dot matrix
if(openingDot == 0){
matrix.clear();
matrix.drawBitmap(0, 0, ready1_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
if(openingDot == 20){
matrix.clear();
matrix.drawBitmap(0, 0, ready2_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
if(openingDot == 40){
matrix.clear();
matrix.drawBitmap(0, 0, ready3_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
openingDot++;
if(openingDot == 60){
openingDot = 0;
}
if(b_start == 1023){ //press start button
sound_effect();
digitalWrite(2,LOW); //start button led low
svb = 1; // do not receive start button input value
b_start = 0;
gameScene = 1;
}
}
//Game Ready Scene
if(gameScene == 1){
dot_gogo(); //printing gogo on dot matrix 4 times
dot_gogo();
dot_gogo();
dot_gogo();
gameScene = 2; // move to play Scene
}
//Game Play Scene
if(gameScene == 2){
//kill monster function
kill1(m1_response,m1_input,vb1,4);
kill2(m2_response,m2_input,vb2,5);
kill3(m3_response,m3_input,vb3,6);
kill4(m4_response,m4_input,vb4,8);
kill5(m5_response,m5_input,vb5,9);
kill6(m6_response,m6_input,vb6,3);
kill7(m7_response,m7_input,vb7,7);
kill8(m8_response,m8_input,vb8,10);
//monster response decrease
m1_response -= 1;
m2_response -= 1;
m3_response -= 1;
m4_response -= 1;
m5_response -= 1;
m6_response -= 1;
m7_response -= 1;
m8_response -= 1;
//kill monster function
kill1(m1_response,m1_input,vb1,4);
kill2(m2_response,m2_input,vb2,5);
kill3(m3_response,m3_input,vb3,6);
kill4(m4_response,m4_input,vb4,8);
kill5(m5_response,m5_input,vb5,9);
kill6(m6_response,m6_input,vb6,3);
kill7(m7_response,m7_input,vb7,7);
kill8(m8_response,m8_input,vb8,10);
//monster led turn on
if(m1_response < 0){
digitalWrite(4,HIGH);
}
if(m2_response < 0){
digitalWrite(5,HIGH);
}
if(m3_response < 0){
digitalWrite(6,HIGH);
}
if(m4_response < 0){
digitalWrite(8,HIGH);
}
if(m5_response < 0){
digitalWrite(9,HIGH);
}
if(m6_response < 0){
digitalWrite(3,HIGH);
}
if(m7_response < 0){
digitalWrite(7,HIGH);
}
if(m8_response < 0){
digitalWrite(10,HIGH);
}
//kill monster function
kill1(m1_response,m1_input,vb1,4);
kill2(m2_response,m2_input,vb2,5);
kill3(m3_response,m3_input,vb3,6);
kill4(m4_response,m4_input,vb4,8);
kill5(m5_response,m5_input,vb5,9);
kill6(m6_response,m6_input,vb6,3);
kill7(m7_response,m7_input,vb7,7);
kill8(m8_response,m8_input,vb8,10);
//monster led off when no button input. also response value randomize
if(m1_response == -100){
digitalWrite(4,LOW); //monster led off
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m1_response = random(50,200);
}
if(m2_response == -100){
digitalWrite(5,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m2_response = random(50,200);
}
if(m3_response == -100){
digitalWrite(6,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m3_response = random(50,200);
}
if(m4_response == -100){
digitalWrite(8,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m4_response = random(50,200);
}
if(m5_response == -100){
digitalWrite(9,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m5_response = random(50,200);
}
if(m6_response == -100){
digitalWrite(3,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m6_response = random(50,200);
}
if(m7_response == -100){
digitalWrite(7,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m7_response = random(50,200);
}
if(m8_response == -100){
digitalWrite(10,LOW);
matrix.clear(); // matrix print 'oh'
matrix.drawBitmap(0, 0, oh_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(1);
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
player_hp -= 1;
m8_response = random(50,200);
}
//kill monster function
kill1(m1_response,m1_input,vb1,4);
kill2(m2_response,m2_input,vb2,5);
kill3(m3_response,m3_input,vb3,6);
kill4(m4_response,m4_input,vb4,8);
kill5(m5_response,m5_input,vb5,9);
kill6(m6_response,m6_input,vb6,3);
kill7(m7_response,m7_input,vb7,7);
kill8(m8_response,m8_input,vb8,10);
//release each monster button input when take off finger from monster button
if(m1_input < 1000){
vb1 = 0;
}
if(m2_input < 1000){
vb2 = 0;
}
if(m3_input < 1000){
vb3 = 0;
}
if(m4_input < 1000){
vb4 = 0;
}
if(m5_input < 1000){
vb5 = 0;
}
if(m6_input < 1000){
vb6 = 0;
}
if(m7_input < 1000){
vb7 = 0;
}
if(m8_input < 1000){
vb8 = 0;
}
//kill monster function
kill1(m1_response,m1_input,vb1,4);
kill2(m2_response,m2_input,vb2,5);
kill3(m3_response,m3_input,vb3,6);
kill4(m4_response,m4_input,vb4,8);
kill5(m5_response,m5_input,vb5,9);
kill6(m6_response,m6_input,vb6,3);
kill7(m7_response,m7_input,vb7,7);
kill8(m8_response,m8_input,vb8,10);
//score print 7segment
if (number == 0){ // set pins ON for drawing number 0
turn_all_off_1();
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 0){ // set pins ON for drawing number 0
turn_all_off_10();
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
}
if (number == 1){ // set pins ON for drawing number 1
turn_all_off_1();
digitalWrite(24, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 1){ // set pins ON for drawing number 1
turn_all_off_10();
digitalWrite(32, HIGH);
digitalWrite(37, HIGH);
}
if (number == 2){ // set pins ON for drawing number 2
turn_all_off_1();
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(26, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 2){ // set pins ON for drawing number 2
turn_all_off_10();
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(34, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
}
if (number == 3){ // set pins ON for drawing number 3
turn_all_off_1();
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(26, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 3){ // set pins ON for drawing number 3
turn_all_off_10();
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(34, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
}
if (number == 4){ // set pins ON for drawing number 4
turn_all_off_1();
digitalWrite(24, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 4){ // set pins ON for drawing number 4
turn_all_off_10();
digitalWrite(32, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(37, HIGH);
}
if (number == 5){ // set pins ON for drawing number 5
turn_all_off_1();
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
}
if (ten == 5){ // set pins ON for drawing number 5
turn_all_off_10();
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
}
if (number == 6){ // set pins ON for drawing number 6
turn_all_off_1();
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
}
if (ten == 6){ // set pins ON for drawing number 6
turn_all_off_10();
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
}
if (number == 7){ // set pins ON for drawing number 7
turn_all_off_1();
digitalWrite(24, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 7){ // set pins ON for drawing number 7
turn_all_off_10();
digitalWrite(32, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
}
if (number == 8){ // set pins ON for drawing number 8
turn_all_off_1();
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 8){ // set pins ON for drawing number 8
turn_all_off_10();
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
}
if (number == 9){ // set pins ON for drawing number 9
turn_all_off_1();
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
}
if (ten == 9){ // set pins ON for drawing number 9
turn_all_off_10();
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(34, HIGH);
digitalWrite(35, HIGH);
digitalWrite(36, HIGH);
digitalWrite(37, HIGH);
}
if (number > 9){ // range check, if greater then 9 go back to 0
number = 0;
ten = ten + 1;
}
//kill monster function
kill1(m1_response,m1_input,vb1,4);
kill2(m2_response,m2_input,vb2,5);
kill3(m3_response,m3_input,vb3,6);
kill4(m4_response,m4_input,vb4,8);
kill5(m5_response,m5_input,vb5,9);
kill6(m6_response,m6_input,vb6,3);
kill7(m7_response,m7_input,vb7,7);
kill8(m8_response,m8_input,vb8,10);
if(player_hp == 3){
turn_all_off_life();
digitalWrite(39, HIGH);
digitalWrite(40, HIGH);
digitalWrite(42, HIGH);
digitalWrite(44, HIGH);
digitalWrite(45, HIGH);
}
if(player_hp == 2){
turn_all_off_life();
digitalWrite(38, HIGH);
digitalWrite(39, HIGH);
digitalWrite(42, HIGH);
digitalWrite(44, HIGH);
digitalWrite(45, HIGH);
}
if(player_hp == 1){
turn_all_off_life();
digitalWrite(40, HIGH);
digitalWrite(45, HIGH);
}
if(player_hp == 0){
turn_all_off_life();
digitalWrite(38, HIGH);
digitalWrite(39, HIGH);
digitalWrite(40, HIGH);
digitalWrite(43, HIGH);
digitalWrite(44, HIGH);
digitalWrite(45, HIGH);
gameScene = 3;
svb = 0; // receive start button value possible
}
if(ten == 10){
gameScene = 4;
svb = 0; // receive start button value possible
}
}
//Game Ending Scene
if(gameScene == 3){
int noteDuration = 3000 / loseDurations[loseNote];
tone(11, lose[loseNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(11);
loseNote++;
if(loseNote == 24){
m1_response = random(50,200); //monster led response
m2_response = random(50,200);
m3_response = random(50,200);
m4_response = random(50,200);
m5_response = random(50,200);
m6_response = random(50,200);
m7_response = random(50,200);
m8_response = random(50,200);
openingDot = 0;
endingDot = 0;
heartDot = 0;
victoryNote = 0;
loseNote = 0;
number = 0;
ten = 0;
player_hp = 3;
turn_all_off_1();
turn_all_off_10();
turn_all_off_life();
gameScene = 0;
b_start = 0;
delay(10);
}
if(endingDot == 0){
matrix.clear();
matrix.drawBitmap(0, 0, over_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
if(endingDot == 1){
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
endingDot++;
if(endingDot == 1){
endingDot = 0;
}
for(int i=3; i<11; i++){ // turn all of monster button
digitalWrite(i, LOW);
}
digitalWrite(2, HIGH);
if(b_start == 1023){ //press start button
sound_effect();
m1_response = random(50,200); //monster led response
m2_response = random(50,200);
m3_response = random(50,200);
m4_response = random(50,200);
m5_response = random(50,200);
m6_response = random(50,200);
m7_response = random(50,200);
m8_response = random(50,200);
openingDot = 0;
endingDot = 0;
heartDot = 0;
victoryNote = 0;
loseNote = 0;
number = 0;
ten = 0;
player_hp = 3;
turn_all_off_1();
turn_all_off_10();
turn_all_off_life();
gameScene = 0;
b_start = 0;
delay(10);
}
}
//happy ending
if(gameScene == 4){
int noteDuration = 3000 / loseDurations[loseNote];
tone(11, lose[loseNote], noteDuration);
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
noTone(11);
loseNote++;
if(loseNote == 24){
m1_response = random(50,200); //monster led response
m2_response = random(50,200);
m3_response = random(50,200);
m4_response = random(50,200);
m5_response = random(50,200);
m6_response = random(50,200);
m7_response = random(50,200);
m8_response = random(50,200);
openingDot = 0;
endingDot = 0;
heartDot = 0;
victoryNote = 0;
loseNote = 0;
number = 0;
ten = 0;
player_hp = 3;
turn_all_off_1();
turn_all_off_10();
turn_all_off_life();
gameScene = 0;
b_start = 0;
delay(10);
}
if(heartDot == 0){
matrix.clear();
matrix.drawBitmap(0, 0, heart_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
if(heartDot == 1){
matrix.clear();
matrix.drawBitmap(0, 0, empty_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
}
heartDot++;
if(heartDot == 1){
heartDot = 0;
}
for(int i=3; i<11; i++){ // turn all of monster button
digitalWrite(i, LOW);
}
digitalWrite(2, HIGH);
if(b_start == 1023){ //press start button
sound_effect();
m1_response = random(50,200); //monster led response
m2_response = random(50,200);
m3_response = random(50,200);
m4_response = random(50,200);
m5_response = random(50,200);
m6_response = random(50,200);
m7_response = random(50,200);
m8_response = random(50,200);
openingDot = 0;
endingDot = 0;
heartDot = 0;
victoryNote = 0;
loseNote = 0;
number = 0;
ten = 0;
player_hp = 3;
turn_all_off_1();
turn_all_off_10();
turn_all_off_life();
gameScene = 0;
b_start = 0;
delay(10);
}
}
delay(10);
}