进行JFrame的跳转时,JFrame中的继承于JPanel的内容显示不出来,且无法关闭

在做一个Java小游戏的时候遇到的问题,困扰了几天
知道自己的代码存在很严重的代码复制现象,但是现在还是先解决目前的问题吧
做的是一个叫“小刻找蜜饼”的小游戏

Ceobe.java

  1. import java.awt.*;
  2. import java.awt.geom.Ellipse2D;
  3. import java.awt.image.*;
  4. import java.io.*;
  5. import javax.imageio.*;
  6. public class Ceobe {
  7. BufferedImage ceobeImg;
  8. int x;
  9. int y;
  10. int width;
  11. int height;
  12. int size;
  13. double g;
  14. double t;
  15. double v0;
  16. double v;
  17. double s;
  18. double angle;
  19. public Ceobe() throws Exception{
  20. cutCircleImage();
  21. ceobeImg = ImageIO.read( new File("res/ceobe1.png"));
  22. x = 180;
  23. y = 250;
  24. width = ceobeImg.getWidth();
  25. height = ceobeImg.getHeight();
  26. size = 40;
  27. g = 4;
  28. t = 0.25;
  29. v0 = 20;
  30. v = v0;
  31. s = 0;
  32. angle = 0;
  33. }
  34. public void moivng() {
  35. double v0 = v;
  36. s = v0 * t + g * t * t / 2;
  37. y = y - ( int) s;
  38. double next_v = v0 - g * t;
  39. v = next_v;
  40. angle = Math.atan(s / 8);
  41. }
  42. public void recovering_v0() {
  43. v = v0;
  44. }
  45. public boolean pick_cake(Cake c, char ch) {
  46. if((y > c.y - c.size / 2 - size / 2)
  47. && (y < c.y)) {
  48. if((x > c.x - size / 2 - c.size / 2)
  49. && (x < c.x + size / 2 + c.size / 2)) {
  50. if(ch == c.character1) {
  51. c.img = c.deleteImg;
  52. c.character1 = c.deletecharacter;
  53. c.x = c.deletex;
  54. c.y = c.deletey;
  55. Game.score += 100 / Char.poetry.length();
  56. return true;
  57. } else {
  58. Game.state = Game.GAME_OVER;
  59. }
  60. }
  61. return false;
  62. }
  63. return false;
  64. }
  65. public boolean exsitFrame() {
  66. if(y > 600 - height / 2 + 10) {
  67. return true;
  68. }
  69. if(y < -height / 2 - 10) {
  70. return true;
  71. }
  72. return false;
  73. }
  74. public void cutCircleImage() {
  75. try {
  76. BufferedImage b_img1 = ImageIO.read(new File("res/ceobe.png"));
  77. BufferedImage b_img2 = new BufferedImage(b_img1.getWidth(),
  78. b_img1.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
  79. Ellipse2D. Double shape = new Ellipse2D.Double(0, 0,
  80. b_img1.getWidth(), b_img1.getHeight());
  81. Graphics2D g2 = b_img2.createGraphics();
  82. g2.setClip(shape);
  83. g2.setBackground( null);
  84. g2.draw( new Rectangle(b_img2.getWidth(), b_img2.getHeight()));
  85. g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
  86. (RenderingHints.VALUE_TEXT_ANTIALIAS_GASP));
  87. g2.drawImage(b_img1, 0, 0, null);
  88. g2.dispose();
  89. ImageIO.write(b_img2, "png", new File("res/ceobe1.png"));
  90. } catch(IOException e) {
  91. e.printStackTrace();
  92. }
  93. }
  94. }

Cale.java

  1. import java.awt.image.*;
  2. import java.io.*;
  3. import javax.imageio.*;
  4. public class Cake {
  5. BufferedImage cakeImg;
  6. BufferedImage deleteImg;
  7. BufferedImage img;
  8. int x;
  9. int deletex;
  10. int y;
  11. int deletey;
  12. int width;
  13. int height;
  14. int size;
  15. int distance;
  16. int gap;
  17. char character;
  18. char deletecharacter;
  19. char character1;
  20. public Cake(int i, int j, char c) throws Exception{
  21. character = c;
  22. deletecharacter = ' ';
  23. character1 = character;
  24. cakeImg = ImageIO. read(new File("res/cake.png"));
  25. deleteImg = ImageIO. read(new File("res/delete.png"));
  26. img = cakeImg;
  27. size = 40;
  28. distance = 280;
  29. gap = 40;
  30. width = cakeImg.getWidth();
  31. height = cakeImg.getHeight();
  32. x = 680 + (i - 1) * distance;
  33. deletex = 0;
  34. y = 25 + 33 + cakeImg.getHeight() / 2 + j * (gap + height);
  35. deletey = 0;
  36. }
  37. public void moving() {
  38. x --;
  39. }
  40. }

Char.java

  1. import java.util.ArrayList;
  2. import java.util.Random;
  3. public class Char {
  4. int x;
  5. int y;
  6. int distance;
  7. int gap;
  8. static String poetry;
  9. char [] character;
  10. char [] newcharacter;
  11. Random r = new Random();
  12. int n;
  13. public Char(int num) {
  14. //初始化信息
  15. poetry = "春眠不觉晓处处闻啼鸟夜来风雨声花落知多少";
  16. character = new char[5];
  17. character [4] = poetry.charAt(num);
  18. n = 0;
  19. ArrayList<Character> ch = new ArrayList<>();
  20. while(ch.size() < 4) {
  21. int xx = r.nextInt(poetry.length());
  22. if(poetry.charAt(xx) != character[4]) {
  23. if (!ch.contains(poetry.charAt(xx))) {
  24. ch.add(poetry. charAt(xx));
  25. character [n] = poetry.charAt(xx);
  26. n++;
  27. }
  28. }
  29. }
  30. newcharacter = random Char(character);
  31. }
  32. public static char[] randomChar(char [] c) {
  33. int length = c.length;
  34. ArrayList<Integer> randomList = new ArrayList<>();
  35. while (randomList.size() < length) {
  36. int x = new Random().nextInt(length);
  37. if (!randomList.contains(x)) {
  38. randomList.add(x);
  39. }
  40. }
  41. char[] randomArray = new char[length];
  42. for (int i = 0; i < randomArray.length; i++) {
  43. randomArray [i] = c[randomList.get(i)];
  44. }
  45. return randomArray;
  46. }
  47. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值