- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我很困惑为什么我的记分板没有在屏幕上更新。分数正在增加(我用调试器检查过,球也正在居中)。但记分牌根本不更新,它不断显示“0:0”
乒乓球类
package com.dheraxysgames.pong;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Pong extends JFrame{
private static final long serialVersionUID = 1L;
//Set Resolution
public static final int width = 300,
height = width / 4 * 3,
scale = 3;
public Pong() {
Dimension size = new Dimension(width * scale, height * scale);
setSize(size);
setTitle("PONG");
setResizable(false);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new GamePanel());
}
public static int getWindowWidth(){
return width * scale;
}
public static int getWindowHeight(){
return height * scale;
}
public static void main(String[] args) {
new Pong();
}
}
GamePanel类
package com.dheraxysgames.pong;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GamePanel extends JPanel implements ActionListener, KeyListener {
private static final long serialVersionUID = 1L;
Ball ball = new Ball();
Player player = new Player();
AI ai = new AI(this);
public GamePanel(){
Timer time = new Timer(50, this);
time.start();
this.addKeyListener(this);
this.setFocusable(true);
}
private void update(){
player.update();
ai.update();
ball.update();
ball.checkCollision(player);
ball.checkCollision(ai);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, Pong.getWindowWidth(), Pong.getWindowHeight());
g.setColor(Color.WHITE);
Font font = new Font("IMMORTAL", Font.BOLD, 50);
g.setFont(font);
g.drawString(player.score + " : " + ai.score, Pong.getWindowWidth() / 2 - 60, 50);
player.paint(g);
ai.paint(g);
ball.paint(g);
}
public Ball getBall(){
return ball;
}
public void actionPerformed(ActionEvent e) {
update();
repaint();
}
//Keyboard
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) player.setYVelocity(-10);
if (e.getKeyCode() == KeyEvent.VK_DOWN) player.setYVelocity(10);
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) player.setYVelocity(0);
if (e.getKeyCode() == KeyEvent.VK_DOWN) player.setYVelocity(0);
}
public void keyTyped(KeyEvent e) {
}
}
玩家等级
package com.dheraxysgames.pong;
import java.awt.Color;
import java.awt.Graphics;
public class Player {
public int score = 0;
private static int width = 50,
height = 150;
private int x = 800, y = (Pong.getWindowHeight() / 2) - (height / 2),
yV = 0;
public Player() {
}
public void update(){
y += yV;
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillRect(x, y, width, height);
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
public void setYVelocity(int speed){
yV = speed;
}
}
人工智能类(class)
package com.dheraxysgames.pong;
import java.awt.Color;
import java.awt.Graphics;
public class AI {
public int score = 0;
private static int width = 50,
height = 150;
private GamePanel field;
private int x = 50, y = (Pong.getWindowHeight() / 2) - (height / 2),
yV = 0;
public AI(GamePanel game) {
this.field = game;
}
public AI(){
}
public void update(){
if(field.getBall().getY() < this.y) yV = -8;
if(field.getBall().getY() > this.y) yV = 8;
y += yV;
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillRect(x, y, width, height);
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public int getWidth(){
return width;
}
public int getHeight(){
return height;
}
public void setYVelocity(int speed){
yV = speed;
}
}
球类
package com.dheraxysgames.pong;
import java.awt.Color;
import java.awt.Graphics;
public class Ball {
private int x = Pong.getWindowWidth() / 2, y = Pong.getWindowHeight() / 2,
xV = 10, yV = 10;
private static int size = 40;
Player player = new Player();
AI ai = new AI();
public void update() {
x += xV;
y += yV;
if (x < 0){
reverseXDirection();
player.score++;
x = Pong.getWindowWidth() / 2;
y = Pong.getWindowHeight() / 2;
}
if (x > Pong.getWindowWidth() - size){
reverseXDirection();
ai.score++;
x = Pong.getWindowWidth() / 2;
y = Pong.getWindowHeight() / 2;
}
if (y < 0 || y > Pong.getWindowHeight() - size - 38) reverseYDirection();
}
public void paint(Graphics g){
g.setColor(Color.GREEN);
g.fillOval(x, y, size, size);
}
private void reverseXDirection(){
xV = -xV;
}
private void reverseYDirection(){
yV = -yV;
}
public void checkCollision(Player p) {
if (this.x + size > p.getX() && this.x + size < p.getX() + p.getWidth()){
if (this.y + size > p.getY() && this.y + size < p.getY() + p.getHeight()){
reverseXDirection();
}
}
}
public void checkCollision(AI ai) {
if (this.x > ai.getX() && this.x < ai.getX() + ai.getWidth()){
if (this.y > ai.getY() && this.y < ai.getY() + ai.getHeight()){
reverseXDirection();
}
}
}
public int getX(){
return x;
}
public int getY(){
return y;
}
}
最佳答案
在您的 Ball 类中,您要更新的分数与在 GamePanel 类中检查的分数不同。
注意你在两个类中如何调用
Player player = new Player();
AI ai = new AI();
Ball 中的玩家和 ai 是与 GamePanel 中的玩家和 ai 不同的实例。
您需要从 GamePanel 类获取玩家和 ai,并将它们传递给 Ball 类。最简单的方法可能是给 Ball 一个像这样的构造函数
Player player;
AI ai;
public Ball(Player player, AI ai) {
this.player = player;
this.ai = ai;
}
并在您的 GamePanel 类中进行更改:
Ball ball = new Ball();
Player player = new Player();
AI ai = new AI(this);
对此:
Player player = new Player();
AI ai = new AI(this);
Ball ball = new Ball(player, ai);
自从我使用 java 以来已经有一段时间了,所以我可能忘记了一种更简单的方法来做到这一点,但这应该可以解决问题。
关于java - Pong 得分未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630239/
学生分数的正则表达式是什么:12.5, 99.5, 87, 1.66 该字段可以为空 (.) 的最大字符长度为 5,如下所示:99.99 分数介于 0 到 100 之间 我用过这个,但是不起作用 va
对于服务器游戏...我有表珠宝: rank,player_id, plscore. 我想显示按分数从高到低排序的前 10 名玩家,如果当前玩家不在前 10 名,则加上当前玩家的分数。 如果我/你目前不
我的游戏中颜色很少: class GameScene: SKScene { let colors = [SKColor.green, SKColor.red, SKColor.blue, SKColo
我正在尝试用 HTML 创建一个简单的多项选择程序,但我在获取用户输入并在最后显示他们的分数时遇到了问题。有人可以帮帮我吗? 我的多项选择测验有 10 个问题,每个问题有 4 个选择。 例如有一个问题
有谁知道如何使用 Foursquare API 获取 field 的分数/评级(例如 9.0/10)? 我正在通过无用户访问进行连接。 https://developer.foursquare.com
我希望能够计算一个矩形相对于矩形网格的 Jaccard 分数/距离(距离为 1 分)。我的网格是 50x50(总共 1625625 个矩形)。 我能够在 0.34 秒内针对所有这些计算出我的输入矩形的
我有这样的文件(当然是简化的情况): Category: A, Rating: 10 Category: A, Rating: 9 Category: A, Rating: 5 Category: B
我想每秒将分数增加 1 分,但我很难让它正常工作。 例如 (伪代码): int score = 0f // on create updateEverySecond() { score += 1
我现在正在制作一款新游戏,您可以在其中保存您的高分,但我不知道是否可以实现 Facebook 排行榜。这样用户就可以看到他们的 friend 并看到他们的高分是多少。这可能吗?好吧,我在不同的应用程序
谁能帮我把它转换成 C#。这真的伤害了我的大脑。 http://www.evanmiller.org/how-not-to-sort-by-average-rating.html require 's
最好的方法是什么才能让标签包含击杀数、生命值或随着与其相关的变量发生变化而更新的分数?目前我只是使用 SKLabelNode 并使用变量为其分配文本,但未计算文本属性,因此它在初始化后保持静态。每次更
我有一个 Wordpress 网站。尝试使用 Google PageSpeed Insights Tool 获得 100/100 分数,但遇到 1 个“错误”。谷歌表示; Eliminate rend
自 V5 以来,与 V4 相比,评分发生了变化。该文档解释了性能、渐进式 Web 应用程序、可访问性、最佳实践和 SEO 的分数,但没有解释总体分数。根据图片,桌面版为 59。 任何人都可以帮助我了解
我运行了自述文件中的示例代码 tryolabs/TLSphinx README.md ,Hypothesis的text属性的结果是空格,而score属性的结果是负数-4420。 为什么我在假设的文本属
确保我做对了: 如果我们使用 sklearn.metrics.log_loss独立的,即 log_loss(y_true,y_pred),它产生一个正分数——分数越小,性能越好。 但是,如果我们使用
我有一个 iframe加载第三方小部件。我只想显示这个iframe在我的页面加载后,因为我不想减慢我的页面加载速度。我关注了 medium article其中描述了如何执行此操作,但他们的解决方案不起
我是一名优秀的程序员,十分优秀!