Member 13744692
ПРОСТАЯ ИГРА В ПИНБОЛ
1 импорт javax.swing.*;
2 импорт java.awt.*;
3 импортируйте java.awt.event.*;
4
5 публичный класс Panel00 расширяет JPanel {
6 таймер t = новый таймер(1, новый слушатель());
7 int ctr = 0;
8 двойная G = 0,1; //гравитационная постоянная
9
10 final int xpos = 280;
11
12 double[] p2d = {280, 200};
13 double[] v2d = {0, 0};
14
15 int points = 0;
16 int жизней = 0;
17 int sides = 13;
18
19 двойной снорм = 400;
20 двойной sd = 450;
21 двойной sv = 0;
22 логический setlock = false;
23 логическое значение rdown, ldown;
24 двойное весло = 130;
25 двойная Рета = 0;
26 двойная лтета = 0;
27
28 int preset[][] = {
29 {0, 400, 135, 450,1}, //правое весло
30 {135, 450, 270, 400,1}, //левое весло
31 {270, 0, 300, 20, 1}, //первая надувная штука
32 {291, 0, 291, 500, 1}, //правая стена
33 {-1, 0, 270, 0, 1}, //верхняя стенка
34 {0, -1, 0, 500, 1} //левая стена
35 };
36
37 int[][] шары = {
38 {80, 80, 30, 50},
39 {230, 280, 20, 200},
40 {50, 200, 25, 100},
41 {200, 100, 10, 500}
42 };
43 int lines[][] = new int[100][5];
44
45 общественных Panel00(){
46 супер();
47 т. старт();
48 addKeyListener(новый ключ());
49 setFocusable(true);
50
51 for(int i = 0; i < preset.длина; i++){
52 строки[i] = предустановка[i];
53 }
54
55 int plen = предустановка.длина;
56
57 int ct = 0;
58 для(int k = 0; k < шариков.длина; k++){
59 int px = шары[k][0], py = шары[k][1], radius = шары[k][2];
60 для(double i = 0; i < 2 * Math.PI; i+= 2 * Math.PI/ стороны){
61 ct++;
62 линии[plen + ct][0] = px + (int) (radius * Math.cos(i));
63 линии[plen + ct][1] = py + (int) (radius * Math.sin(i));
64 линий[ПЛЭН + КТ][2] = РХ + (инт) (радиус * математика.потому что(я - 2 *математика.ПИ / стороны));
65 линий[ПЛЭН + КТ][3] = ру + (инт) (радиус * математика.грех(я - 2 * математика.ПИ / стороны));
66 }
67 }
68
69 }
70
71 прослушиватель частного класса реализует ActionListener {
72 public void actionPerformed(ActionEvent e){
73 перекрасить();
74 }
75 }
76
77 public void paintComponent(графика g){
78 super.paintComponent(g);
79 v2d[1] += G;
80 p2d[1] += v2d[1];
81 p2d[0] += v2d[0];
82
83
84
85 if(p2d[1] > 1000){
86 p2d[0] = 280;
87 p2d[1] = 200;
88 v2d[0] = 0;
89 v2d[1] = 0;
90 жизней++;
91 }
92 if(p2d[0] == 280 && p2d[1] > sd){
93 p2d[1] = sd;
94 v2d[1] = Math.min(v2d[1], sv);
95 }
96
97 if(setlock == false){
98 sv *= 0,95; //коэффициент демпфирования для упругости
99 sv -= (sd - snorm)/30;
100 sd += sv;
101 }
102 двойной rc = 0,1;
103 if(rdown){
104 rtheta = Math.max(-0.5, rtheta - rc);
105 }еще{
106 rtheta = Math.min(0.5, rtheta + rc);
107 }
108 if(ldown){
109 lteta = Math.max(-0.5, lteta - rc);
110 }еще{
111 lteta = Math.min(0.5, lteta + rc);
112 }
113
114 строки[0][2] = строки[0][0] + (инт) (математика.потому что(ltheta) * весло);
115 линий[0][3] = строки[0][1] + (инт) (математика.грех(ltheta) * весло);
116 линий[1][0] = строки[1][2] + (инт) (-математика.потому что(rtheta) * весло);
117 линий[1][1] = строки[1][3] + (инт) (математика.грех(rtheta) * весло);
118 int rX = (int) p2d[0];
119 int rY = (int) p2d[1];
120 int r = 10;
121 г. setColor(цвет.синий);
122 г. drawArc(rX - r, rY - r, 2 * r, 2 * r, 0, 360);
123 г. setColor(цвет.черный);
124 для(int i = 0; i < строк.длина; i++){
125 int x1 = строки[i][0],
126 y1 = линии[i][1],
127 x2 = линии[i][2];
128 двойной y2 = линии[i][3] + 0.0001;
129 if(i > preset.длина){
130 г. setColor(Цвет.Красный);
131 }
132 гр.drawLine(Х1, У1, Х2, (инт) математика.круг(У2));
133
134 двухместных адррес bmag = математика.функция sqrt(v2d по[0] * v2d по - [0] + v2d по[1] * v2d по[1]);
135 двойной линейный наклон = ((двойной)(x2 - x1))/((двойной)(y2 - y1));
136 двойной шаровой склон = v2d[0] / v2d[1];
137 //System.out.println(ballslope + "" + lineslope);
138 //xpos * ballslope + p2d[1] = xpos * lineslope + y1;
139 двойной бинтер = p2d[0] - шаровой склон * p2d[1];
140 двойной Линтер = x1 - lineslope * y1;
141
142 double y = (binter - linter)/(lineslope - ballslope);
143 двойной sx = y * ballslope + binter;
144 //двойной qx = y * lineslope + linter;
145 двухместных Ла = математика.инструмент atan2(У2 - У1 Х2 - Х1);
146 double ba = Math.atan2(v2d[1], v2d[0]);
147
148 двойной da = 2 * la - ba;
149
150 //System.out.println(sx + "" + y);
151 /*
152 г. drawLine((int)sx, (int)y, (int)p2d[0], (int)p2d[1]);
153 г. fillRect((int)sx - 2, (int)y - 2, 4, 4);
154 гр.drawLine((инт)p2d[0], (инт)p2d[1], (инт) (p2d[0] + математика.потому что(да) * 100), (инт)(p2d[1] + математика.грех(да) * 100));
155 //*/
156 если(ЗХ &ГТ;= математика.мин(Х2, Х1) и усилитель; & ЗХ &ЛТ;= математика.Макс(х1, х2) и усилитель; &
157 математика.мин(У1, У2) &ЛТ;= у &амп;&амп; математика.Макс(У1, У2) &ГТ;= г){
158 двухместных interdist = математика.корень(математика.военнопленных(ЗХ - p2d[0],2) + математика.пр(г - p2d[1],2));
159 двухместный крошечный = 0.0001;
160 двухместных futuredist = математика.корень(математика.военнопленных(ЗХ - (p2d[0] + математика.потому что(Ба) * крошечный),2) + математика.пр(г - (p2d[1] + математика.грех(ба) * крошечный),2));
161
162 если(interdist &ЛТ;= адррес bmag + Р &амп;&амп; futuredist &ЛТ; interdist){
163 //System.out.println("Carl Sagan" + i); //это каламбур, потому что он написал книгу под названием Contact
164 if(i > preset.длина){
165 int ball = (int) Math.floor((i - preset.длина)/стороны);
166 //System.out.println(шары[мяч][2]);
167 очков += шары[мяч][3] * bmag;
168 }
169 v2d[0] = Math.cos(da) * bmag;
170 v2d[1] = Math.sin(da) * bmag;
171 }
172 }
173 }
174 г. setColor(цвет.черный);
175 //System.out.println(sx + "" + qx);
176 //System.out.println(ballslope + "" + lineslope);
177 //двойной наклон = Math.atan2(v2d[1], v2d[0]);
178 //g.drawLine((int) p2d[0], (int) p2d[1], (int) (p2d[0]+10*v2d[0]), (int) (p2d[1]+10*v2d[1]));
179
180 г. fillRect(xpos - 5, (int)sd + 10, 10, 20);
181
182 г. шнурок("оценка:" + очки + "сброс:" + жизни, 10, 15);
183
184 }
185
186 ключ закрытого класса расширяет KeyAdapter {
187 public void keyPressed(KeyEvent e){
188 if(e.getKeyCode() == KeyEvent.VK_DOWN){
189 setlock = true;
190 sd += 2;
191 }
192 if(e.getKeyCode() == KeyEvent.VK_LEFT){
193 ldown = true;
194 }
195 if(e.getKeyCode() == KeyEvent.VK_RIGHT){
196 rdown = true;
197 }
198 }
199 public void keyReleased(KeyEvent e){
200 setlock = false;
201 if(e.getKeyCode() == KeyEvent.VK_LEFT){
202 ldown = false;
203 }
204 if(e.getKeyCode() == KeyEvent.VK_RIGHT){
205 rdown = false;
206 }
207 }
208 }
209 }