Java 进入一边,退出另一边
你能帮我解决一个小问题吗?我怎样才能把我的pacman移动到左边的出口,然后在右边进入相同的x位置? 我发现我的阵列没有弹跳。 我的吃豆人在我的阵型内旅行。 谢谢你的帮助Java 进入一边,退出另一边,java,exit,enter,pacman,Java,Exit,Enter,Pacman,你能帮我解决一个小问题吗?我怎样才能把我的pacman移动到左边的出口,然后在右边进入相同的x位置? 我发现我的阵列没有弹跳。 我的吃豆人在我的阵型内旅行。 谢谢你的帮助 class PmanMove extends JPanel { private void paintPacman(Graphics2D g) { g.setColor( Color.yellow ); g.fill(new Arc2D.Double(Xpos*cellSize, Ypos*cell
class PmanMove extends JPanel {
private void paintPacman(Graphics2D g) {
g.setColor( Color.yellow );
g.fill(new Arc2D.Double(Xpos*cellSize, Ypos*cellSize, pRadius, pRadius, 45, 220, Arc2D.PIE));
g.setFont(new Font(null, Font.PLAIN, 18));
g.drawString("SCORE "+score, 50, 50);
repaint();
}
private void paintBoard(Graphics2D g) {
for (int i=0;i<area.length; i++) {
for(int j=0; j <area[i].length; j++) {
if (area[i][j]==1){
g.setColor(Color.BLACK);
g.fillRect(i*cellSize,j*cellSize,cellSize,cellSize);}
// g.fillRect(i*cellSize,j*cellSize,cellSize,cellSize);}
if (area[i][j]==2){
g.setColor(Color.YELLOW);
g.fillOval(i*cellSize+cellSize/4,j*cellSize+cellSize/4,cellSize-cellSize/2,cellSize-cellSize/2);}
}
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
paintBoard(g2d);
paintPacman(g2d);
}
public void register() {
setFocusable(true);
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if( e.getKeyCode() == e.VK_RIGHT ) {
if(Xpos<(400/cellSize)) {
switch (area[Xpos+1][Ypos]) {
case 4: Xpos+=speed; break;
case 3: Xpos+=speed; break;
case 2: area[Xpos+1][Ypos]=0; Xpos+=speed; score+=5; break;
case 0: Xpos+=speed; break;
}
}
if( Xpos+1 > (400/cellSize)) {
Xpos = 0;
}
}
if( e.getKeyCode() == e.VK_LEFT ) {
if(Xpos>0) {
switch (area[Xpos-1][Ypos]) {
case 4: Xpos-=speed; break;
case 3: Xpos-=speed; break;
case 2: area[Xpos-1][Ypos]=0; Xpos-=speed; score+=5; break;
case 0: Xpos-=speed; break;
}
}
if( Xpos <= 0) {
Xpos = (getWidth()/(cellSize/2));
}
}
if( e.getKeyCode() == e.VK_UP) {
if(Ypos>0) {
switch (area[Xpos][Ypos-1]) {
case 4: Ypos-=speed; break;
case 3: Ypos-=speed; break;
case 2: area[Xpos][Ypos-1]=0; Ypos-=speed; score+=5; break;
case 0: Ypos-=speed; break;
}
}
if( Ypos <=0 ) {
Ypos = (getHeight()/(cellSize/2));
}
}
if(e.getKeyCode() == e.VK_DOWN) {
if(Ypos<400/cellSize) {
switch (area[Xpos][Ypos+1]) {
case 4: Ypos+=speed; break;
case 3: Ypos+=speed; break;
case 2: area[Xpos][Ypos+1]=0; Ypos+=speed; score+=5; break;
case 0: Ypos+=speed; break;
}
}
if( Ypos >= (getHeight()/(cellSize/2))) {
Ypos = 0;
}
}
}
});
requestFocus();
}
public static void main( String args[] ) {
JFrame fr = new JFrame("PmanMove");
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setBackground(new Color(107,106,100));
fr.setResizable(false);
PmanMove pman = new PmanMove();
fr.setSize(400,400);
fr.add(pman);
fr.setVisible(true);
}
}
类PmanMove扩展了JPanel{
私人空间画家Pacman(Graphics2D g){
g、 setColor(Color.yellow);
g、 填充(新的Arc2D.Double(Xpos*cellSize,Ypos*cellSize,pRadius,pRadius,45220,Arc2D.PIE));
g、 setFont(新字体(null,Font.PLAIN,18));
g、 抽绳(“分数”+分数,50,50);
重新油漆();
}
专用虚空油漆板(图形2D g){
对于(int i=0;i假设您的数组有
N
个元素,并且您处于i
位置,则向右移动将是:
(i + 1) % N
这个
%
被调用。如果i+1=N
,你将得到索引0,从而避免索引ouf被绑定并在左边着陆。从技术上讲,如果i+1>N
你将得到1
,i==N+2
你将得到2
,但你的观点仍然存在。特别是在这方面一次只递增一个的上下文。可能还应该指出,这不适用于左侧,因为余数运算符(与模运算中的减法不完全相同)保留了被除数的符号。