Advertisement
Guest User

Snake

a guest
Oct 16th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1. package Snake;
  2.  
  3. import java.awt.Dimension;
  4.  
  5. import javax.swing.JFrame;
  6.  
  7. public class Snake {
  8.  
  9. public static void main(String[] args) {
  10. JFrame frame=new JFrame("Snake");
  11. frame.setContentPane(new SnakePanel());
  12. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  13. frame.setResizable(false);
  14. frame.pack();
  15.  
  16. frame.setPreferredSize(new Dimension(SnakePanel.width,SnakePanel.height));
  17. frame.setLocationRelativeTo(null);
  18. frame.setVisible(true);
  19.  
  20. }
  21.  
  22. }
  23. //////////////////////////////////////////////////////////////////////////////////////////////////
  24. package Snake;
  25.  
  26. import java.awt.Color;
  27. import java.awt.Dimension;
  28. import java.awt.Graphics;
  29. import java.awt.Graphics2D;
  30. import java.awt.event.KeyEvent;
  31. import java.awt.event.KeyListener;
  32. import java.awt.image.BufferedImage;
  33. import java.util.ArrayList;
  34.  
  35. import javax.swing.JPanel;
  36.  
  37. public class SnakePanel extends JPanel implements Runnable, KeyListener {
  38.  
  39. public static final int width=400;
  40. public static final int height=400;
  41. private Graphics2D g2d;
  42. private BufferedImage image;
  43. private Thread thread;
  44. private boolean running;
  45. private long targetTime;
  46. private final int SIZE=10;
  47. Entity head,head1,apple;
  48. ArrayList<Entity>snake;
  49. private int score1,score2;
  50. private int level1, level2;
  51. private boolean gameOver;
  52. private int dx, dy;
  53. private boolean up,down, right,left,start;
  54. public SnakePanel() {
  55. setPreferredSize(new Dimension(width,height));
  56. setFocusable(true);
  57. requestFocus();
  58. addKeyListener(this);
  59. }
  60. public void addNotify() {
  61. super.addNotify();
  62. thread=new Thread(this);
  63. thread.start();
  64. }
  65. private void setFPS(int fps) {
  66. targetTime=1000/fps;
  67. }
  68. public void keyPressed(KeyEvent e) {
  69. int k=e.getKeyCode();
  70. if(k==KeyEvent.VK_UP) up=true;
  71. if(k==KeyEvent.VK_DOWN) down=true;
  72. if(k==KeyEvent.VK_LEFT) left=true;
  73. if(k==KeyEvent.VK_RIGHT) right=true;
  74. if(k==KeyEvent.VK_ENTER) start=true;
  75. }
  76.  
  77.  
  78. public void keyReleased(KeyEvent e) {
  79. int k=e.getKeyCode();
  80. if(k==KeyEvent.VK_UP) up=false;
  81. if(k==KeyEvent.VK_DOWN) down=false;
  82. if(k==KeyEvent.VK_LEFT) left=false;
  83. if(k==KeyEvent.VK_RIGHT) right=false;
  84. if(k==KeyEvent.VK_ENTER) start=false;
  85.  
  86. }
  87.  
  88.  
  89. public void keyTyped(KeyEvent arg0) {
  90.  
  91.  
  92. }
  93.  
  94.  
  95. public void run() {
  96. if(running) return;
  97. init();
  98. long startTime;
  99. long elapsed;
  100. long wait;
  101. while(running) {
  102. startTime=System.nanoTime();
  103. update();
  104. requestRender();
  105. elapsed=System.nanoTime()-startTime;
  106. wait=targetTime-elapsed/10000000;
  107. if(wait>0) {
  108. try {
  109. Thread.sleep(wait);
  110. }catch(Exception e) {
  111. e.printStackTrace();
  112. }
  113. }
  114. }
  115.  
  116. }
  117. private void init() {
  118. image=new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
  119. g2d=image.createGraphics();
  120. running=true;
  121. setUplevel();
  122. gameOver=false;
  123. level1=1;
  124. level2=1;
  125. setFPS(level1*10);
  126. setFPS(level2*10);
  127. }
  128. private void setUplevel() {
  129. snake=new ArrayList<Entity>();
  130. head=new Entity(SIZE);
  131. head1=new Entity(SIZE);
  132. head.setPosition(width/2, height/2);
  133. head1.setPosition(width/4, height/4);
  134. snake.add(head);
  135. snake.add(head1);
  136. for(int i=1;i<3;i++) {
  137. Entity e=new Entity(SIZE);
  138. e.setPosition(head.getX()+(i*SIZE), head.getY());
  139. e.setPosition(head1.getX()+(i*SIZE), head.getY());
  140. snake.add(e);
  141. }
  142. apple=new Entity(SIZE);
  143. setApple();
  144. score1=0;
  145. score2=0;
  146. gameOver=false;
  147. level1=1;
  148. level2=1;
  149. dx=dy=0;
  150. setFPS(level1*10);
  151. setFPS(level2*10);
  152. }
  153. public void setApple() {
  154. int x=(int)(Math.random()*(width-SIZE));
  155. int y=(int)(Math.random()*(height-SIZE));
  156. x=x-(x%SIZE);
  157. y=y-(y%SIZE);
  158. apple.setPosition(x, y);
  159. }
  160. private void requestRender() {
  161. render1(g2d);
  162. Graphics g=getGraphics();
  163. g.drawImage(image,0,0,null);
  164. g.dispose();
  165.  
  166. }
  167. private void requestRender2() {
  168. render2(g2d);
  169. Graphics g=getGraphics();
  170. g.drawImage(image,0,0,null);
  171. g.dispose();
  172.  
  173. }
  174. private void update() {
  175. if(gameOver) {
  176. if(start) {
  177. setUplevel();
  178. }
  179. return;
  180. }
  181. if(up&&dy==0) {
  182. dy=-SIZE;
  183. dx=0;
  184. }
  185. if(down&&dy==0) {
  186. dy=SIZE;
  187. dx=0;
  188. }
  189. if(left&&dx==0) {
  190. dy=0;
  191. dx=-SIZE;
  192. }
  193. if(right&&dx==0 && dy!=0) {
  194. dy=0;
  195. dx=SIZE;
  196. }
  197. if(dx!=0 || dy!=0) {
  198. for(int i=snake.size()-1;i>0;i--) {
  199. snake.get(i).setPosition(
  200. snake.get(i-1).getX(),
  201. snake.get(i-1).getY());
  202. }
  203. head.move(dx, dy);
  204. }
  205. for(Entity e:snake) {
  206. if(e.isCollsion(head)) {
  207. gameOver=true;
  208. break;
  209. }
  210. }
  211. if(apple.isCollsion(head)) {
  212. score1++;
  213. score2++;
  214. setApple();
  215.  
  216. Entity e=new Entity(SIZE);
  217. e.setPosition(-100,-100);
  218. snake.add(e);
  219. if(score1%10==0) {
  220. level1++;
  221. if(level1>10) level1=10;
  222. setFPS(level1*10);
  223. }
  224. else if(score2%10==0) {
  225. level2++;
  226. if(level2>10) level2=10;
  227. setFPS(level2*10);
  228. }
  229. }
  230. if(head.getX()<0)head.setX(width);
  231. if(head.getY()<0)head.setY(height);
  232. if(head.getX()>width)head.setX(0);
  233. if(head.getY()>width)head.setY(0);
  234. }
  235. public void render1(Graphics2D g2d) {
  236. g2d.clearRect(0, 0, width, height);
  237. g2d.setColor(Color.green);
  238. for(Entity e:snake) {
  239. e.render(g2d);
  240. }
  241. g2d.setColor(Color.RED);
  242. apple.render(g2d);
  243. if(gameOver) {
  244. g2d.drawString("Game Over!",150,200);
  245. }
  246.  
  247. g2d.setColor(Color.white);
  248. g2d.drawString("Score: "+score1+" Level: "+level1,10,10);
  249. if(dx==0 && dy==0) {
  250. g2d.drawString("Ready!", 150, 200);
  251. }
  252. }
  253. public void render2(Graphics2D g2d) {
  254. g2d.clearRect(0, 0, width, height);
  255. g2d.setColor(Color.blue);
  256. for(Entity e:snake) {
  257. e.render(g2d);
  258. }
  259. g2d.setColor(Color.RED);
  260. apple.render(g2d);
  261. if(gameOver) {
  262. g2d.drawString("Game Over!",300,400);
  263. }
  264.  
  265. g2d.setColor(Color.white);
  266. g2d.drawString("Score: "+score2+" Level: "+level2,10,10);
  267. if(dx==0 && dy==0) {
  268. g2d.drawString("Ready!", 300, 400);
  269. }
  270. }
  271.  
  272. }
  273. ////////////////////////////////////////////////////////////////////////////////////////////
  274. package Snake;
  275.  
  276. import java.awt.Graphics2D;
  277. import java.awt.Rectangle;
  278.  
  279. public class Entity {
  280. private int x,y,size;
  281. public Entity(int size) {
  282. this.size=size;
  283. }
  284.  
  285. public int getX() {
  286. return x;
  287. }
  288. public int getY() {
  289. return y;
  290. }
  291. public void setX(int x) {
  292. this.x=x;
  293. }
  294. public void setY(int y) {
  295. this.y=y;
  296. }
  297. public void setPosition(int x, int y) {
  298. this.x=x;
  299. this.y=y;
  300. }
  301. public void move(int dx, int dy) {
  302. x+=dx;
  303. y+=dy;
  304. }
  305. public Rectangle getBound() {
  306. return new Rectangle(x,y,size, size);
  307. }
  308. public boolean isCollsion(Entity o) {
  309. if(o==this)
  310. return false;
  311. return getBound().intersects(o.getBound());
  312. }
  313. public void render(Graphics2D g2d) {
  314. g2d.fillRect(x+1,y+1,size-2,size-2);
  315. }
  316. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement