-
Notifications
You must be signed in to change notification settings - Fork 0
/
Pacman.pde
169 lines (153 loc) · 6.19 KB
/
Pacman.pde
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
class Pacman{
//fields
Level level;
int lives, score, x, y, speed, radius, rad, thresh;
boolean canU, canR, canD, canL;
PImage[] pacman;
String[] pacmanImg = {"pacmanClosedL.png", "pacmanHalfwayL.png", "pacmanOpenL.png",
"pacmanClosedR.png", "pacmanHalfwayR.png", "pacmanOpenR.png" };
color b,w;
//constructor
Pacman(){
lives = 3;
score = 0;
x = 325;
y = 450;
speed = 3; //Specify the speed of pac here
radius = 30; //Radius of the default pacman
rad = radius/2 + 2; //Just putting this here for some easier calculations later
thresh = 7; //Specifies how close I have to be to the intersection of the grid in order to turn
canU = true; canR = true; canD = true; canL = true; //Used for collision detection
b = color(#000000); w = color(#ffffff); //Black for background, white for dots
pacman = new PImage[6];
level = new Level();
level.drawLevel(); //Drawing my levels here instead of main because it didn't work to redraw bg there
level.drawDots();
}
//methods
//////////////////Just so you can see a fraction of the pain I was going through////////////////////
//for (int i = x-rad; i <= x+rad; i++){println(get(i,y-rad)); if (get(i,y-rad) == -16777216){canU = true;} else {println("STOP");canU = false;break;}}
/*for (int i = 0; i < 20; i++){
println(int(x+(radius-14)*sin(TWO_PI/20*i)) + ", " + int(y+(radius-14)*cos(TWO_PI/20*i)));*/
//stroke(255);
//point(int(x+(radius-14)*sin(TWO_PI/20*i)),int(y+(radius-14)*cos(TWO_PI/20*i))); noStroke();
/*get(int(x+(radius-14)*sin(TWO_PI/20*i)), int(y+(radius-14)*cos(TWO_PI/20*i))*/ //alternate test
/*if (pixels[int(y+(radius-14)*cos(TWO_PI/20*i))*width+int(x+(radius-14)*sin(TWO_PI/20*i))] != -16777216){
canU = false; println("cant move");break;} else {canU = true;}}*/
//point(x, y-rad);
/*boolean canMove(){
boolean canMove = false;
color b = -16777216; color w = -1; color yel = -256;
int rad = radius/2+1;
loadPixels();
//Same(ish) logic as the bit in the Dots class. Checks the 23x35 square of the image to see
//if there's any blue and returns false if there is
for (int i = x-12; i < x+12; i++){
for (int j = y-12; j < y+12; j++){
if (pixels[i+j*width] != b){
canMove = false;
println("Can't move homie"); break;
} else {canMove = true; println("Can move");}
}
}
//println(x + " " + y);
if (get(x-rad,y) == -16777216 || get(x-rad,y-rad) == -1 || get(x-rad,y-rad) == -256 ||
get(x+rad,y) == -16777216 || get(x+rad,y+rad) == -1 || get(x+rad,y+rad) == -256 ||
get(x,y+rad) == -16777216 || get(x-rad,y+rad) == -1 || get(x-rad,y+rad) == -256 ||
get(x,y-rad) == -16777216 || get(x+rad,y-rad) == -1 || get(x+rad,y-rad) == -256 ){
println(get(x-rad,y-rad)); canMove = true;
} else {println(get(x-rad,y) + " Can't move homie");}
return canMove;
}*/
void drawPac(){
level.drawLevel();
ellipseMode(CENTER);
fill(#ffff00); ellipse(x,y, 30,30);
if (x > 630 && y == 300) {x = 30;} //If he goes off the edge of the screen in those two parts, stick him
if (x < 30 && y == 300) {x = 630;} //on the other side
//Score keeper
fill(0);
rect(160,600, 200,100);
textSize(30);
fill(#ffff00);
text("SCORE: ", 50, 625);
fill(#ffffff);
text(score, 170, 625);
fill(#ffff00);
}
void pacUp(){
//Might keep this if I make it an image
/*imageMode(CENTER);
for (int i = 0; i < 6; i++){pacman[i] = loadImage(pacmanImg[i]);}
fill(0);
rectMode(CENTER);
if (arrow_ == 1){
while(canMove()){
y-=1; rect(x,y+1, 26,35); image(pacman[0], x, y);
}
}*/
/* This logic is the same for the other three methods. Since we're going up, get(x,y-rad) checks the color of the top middle
pixel of pacman. If it's black or white, set continue variable to true and keep going. Next I'm checking to see if my current
X value lays on the 50x50 grid. Because it would be difficult to press the arrow key at the exact coordinate that I'm allowed
to turn, I have a threshold of +-5 pixels in which I'm allowed to press the key to turn. If I continued moving with my x value
plus or minus anything within that threshold, it will throw me off my grid (and into my walls), and so I'm adding that i value
back to X. Additionally, if my collision detector is white, meaning I'm on a dot, then I destroy that dot. *sigh*
*/
if (get(x,y-rad) == b || get(x,y-rad) == w){
for (int i = -thresh; i <= thresh; i++){
if ((x+i)%50 == 0){
if (get(x,y-rad) == w){if (level.destroyDot(x, y-rad)){score++;}}
canU = true; x += i; break;
}
}
} else {println("Can't move up"); canU = false;}
if (canU){
y-=speed;
ellipse(x,y, radius,radius);
}
} //End pacUp
void pacRight(){
if (get(x+rad,y) == b || get(x+rad,y) == w){
for (int i = -thresh; i <= thresh; i++){
if ((y+i)%50 == 0){
if (get(x+rad,y) == w){if (level.destroyDot(x+rad,y)){score++;}}
canR = true; y += i; break;
}
}
} else {println("Can't move right"); canR = false;}
if (canR){
x+=speed;
ellipse(x,y, radius,radius);
}
} //end pacRight
void pacDown(){
if (get(x,y+rad) == b || get(x,y+rad) == w){
for (int i = -thresh; i <= thresh; i++){
if ((x+i)%50 == 0){
if (get(x,y+rad) == w){if (level.destroyDot(x,y+rad)){score++;}}
canD = true; x += i; break;
}
}
} else {println("Can't move down"); canD = false;}
if (canD){
y+=speed;
ellipse(x,y, radius,radius);
}
} //end pacDown
void pacLeft(){
if (get(x-rad,y) != b || get(x-rad,y) != w){
for (int i = -thresh; i <= thresh; i++){
if ((y+i)%50 == 0){
if (get(x-rad,y) == w){if (level.destroyDot(x-rad,y)){score++;}}
canL = true; y += i; break;
}
}
} else {println("Can't move left"); canL = false;}
if (canL){
x-=speed;
ellipse(x,y, radius,radius);
}
} //end pacLeft
//For debuggin'
void getXY(){println(x + ", " + y);}
}//eof