Vyalov
Материал из Department of Theoretical and Applied Mechanics
Описание
Don't touch the spikes - достаточно популярная игра c простым и понятным геймплеем
Автор: Вялов Тимофей 3630103/90003
Игра
Код программы
Код программы на языке JavaScript:
1 window.addEventListener('load',main,false);
2 function main() {
3 var ctx = canvas_example.getContext('2d');
4 var w=canvas_example.width;
5 var h=canvas_example.height;
6
7 var bird = new Image();
8 var bird1 = new Image();
9 var bg = new Image();
10 var spike = new Image();
11 var spike1 = new Image();
12 var hscore = new Image();
13
14 bird.src = "img/bird.png";
15 bird1.src = "img/bird1.png";
16 bg.src = "img/bg.png";
17 spike.src = "img/spike.png";
18 spike1.src = "img/spike1.png";
19 hscore.src = "img/hs.png";
20
21
22 var x = 283; //координаты птицы
23 var y = 290; //
24 var vx = 0; //скорость по х
25 var vy = 0; // скорость по у
26 var g = 0; // ускорение у
27 var t = 2; // условное время
28 var a = 0 // ускорение х
29 var l = 26; // длина шипов
30 var q = 0;//для функции рандома
31 var s = 0;//счет
32 var hs = 0;//heigh score
33 var c = 0;//complexity
34
35
36 canvas_example.onmousedown = function() {
37 vy = -3;
38 t = 2.5 ;
39 if(vx >= 0){
40 vx = 3
41 }
42 else{
43 vx = -3
44 }
45 g = 0.04;
46
47 }
48
49 function draw_bird() {
50 vy += g*t;
51 y = y + vy*t;
52
53 if (y>574){
54 x =283;
55 y = 290;
56 vx = 0;
57 vy = 0;
58 g = 0;
59 if(s>1){r = []};
60 s = 0;
61 c = 0;
62
63 }
64 if (y<5){
65 x =283;
66 y = 290;
67 vx = 0;
68 vy = 0;
69 g = 0;
70 if(s>1){r = []};
71 s = 0;
72 c = 0;
73 };
74 if ((x>100)&&(x<500)&&(vx>0)){
75 x +=vx
76 }
77 if ((x>410)&&(vx>0)){
78 x = 412;
79 vx = -vx;
80 s++;
81 if(c<=0.7){
82 c+=0.02
83 }
84 }
85 if ((x>100)&&(x<500)&&(vx<0)){
86 x +=vx
87 }
88 if ((x<155)&&(vx<0)){
89 x = 156;
90 vx = -vx;
91 s++;
92 if(c<=0.7){
93 c+=0.02
94 }
95 }
96
97 if (vy>3){
98 vy = 3
99 }
100 t=t+0.05
101 if (t>5){
102 t = 5
103 }
104 if (vx>=0){
105 ctx.drawImage(bird, x, y);
106 }
107 else{
108 ctx.drawImage(bird1, x, y);
109 }
110
111 }
112
113 var r = []
114 function random_spike() {
115 r = []
116 for(var i = 0; i < 23; i++){
117 q = Math.round(Math.random()-0.4+c)
118 if (q ===1){
119 r[i]=i*l;
120 }
121 }
122 for(i = 1;i<23;i++){
123 if(r[i]==undefined && r[i-1]!=undefined && r[i+1]!=undefined){r[i+1]=undefined}
124 }
125
126 }
127
128 function draw_spike(){
129 for(var j = 0; j < 23; j++){
130 ctx.drawImage(spike, 150, r[j])
131 }
132 }
133 function draw_spike1(){
134 for(var j = 0; j < 23; j++){
135 ctx.drawImage(spike1, 412, r[j])
136 }
137 }
138
139 function drawScore() {
140 ctx.font = "35px Arial";
141 ctx.fillStyle = "#0095DD";
142 if(s<10){ctx.fillText(s, 291, 316)}
143 else{ctx.fillText(s, 283, 316)}
144 }
145 function drawHeighScore() {
146 ctx.font = "40px Arial";
147 ctx.fillStyle = "#008080";
148 ctx.fillText(hs, 460, 90)
149 }
150
151 hscore.onload = draw_bird;
152 //////////////////////////////////////////////////////////////////////////////
153 setInterval(function() {
154 ctx.drawImage(bg, 150, 0);
155 ctx.drawImage(hscore, 450, 0);
156 drawScore();
157 if(s>hs){hs =s }
158 drawHeighScore();
159 draw_bird();
160 if((x === 409) || (x === 156)){
161 random_spike();
162 }
163 if (s>0 && vx<0){draw_spike();
164 for (i=0;i<23;i++){
165 if (y>r[i]-20 && y<r[i]+20 && x<160){
166 x =283;
167 y = 290;
168 vx = 0;
169 vy = 0;
170 g = 0;
171 if(s>1){r = []};
172 s = 0;
173 c = 0;
174 }
175 }}
176 if (s>0 && vx>0){
177 draw_spike1();
178 for (i=0;i<23;i++){
179 if (y>=r[i]-20 && y<=r[i]+20 && x>400){
180 x =283;
181 y = 290;
182 vx = 0;
183 vy = 0;
184 g = 0;
185 if(s>1){r = []};
186 s = 0;
187 c = 0;
188 }
189 }}
190 }, 1000 / 60 );
191 }