Привет! Я последовал руководству по созданию игры в змею. Я добавил ключевой слушатель, но он не обнаружил никаких ключей. - PullRequest
0 голосов
/ 23 января 2019

Геймплей

Я следовал учебному пособию и делал все, что писал одинаковые вещи, но он не обнаружил никаких клавиш, любая помощь была бы признательна.

ключевой слушатель не работает

package com.tutorial.main;

import java.awt.Color;
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.Timer;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Gameplay extends JPanel implements KeyListener, ActionListener{


    private int[] snakexlength = new int [750];
    private int[] snakeylength = new int [750];

    private boolean left = false;
    private boolean right = false;
    private boolean up = false;
    private boolean down = false;

    private ImageIcon rightmouth; 
   private ImageIcon leftmouth; 
   private ImageIcon upmouth; 
   private ImageIcon downmouth; 

   private int lengthofsnake = 3;

   private Timer timer;
   private int delay = 100;
   private ImageIcon snakeimage;


   private int moves = 0;
    private ImageIcon titleImage;


    public Gameplay(){                           
      this.addKeyListener(this);
      setFocusable(true);
      setFocusTraversalKeysEnabled(false);
      timer = new Timer(delay, this);
      timer.start();
    }


    public void paint(Graphics g) {                              

    if(moves == 0) {
    snakexlength[2]=50; 
    snakexlength[1]=75;
    snakexlength[0]=100;


    snakeylength[2]=100;    
    snakeylength[1]=100;
    snakeylength[0]=100;


    }

    g.setColor(Color.white);    
    g.drawRect(24, 10, 851, 55);    

    titleImage = new ImageIcon("snaketitle.jpg");
    titleImage.paintIcon(this, g, 25, 11);  

    g.setColor(Color.WHITE);
    g.drawRect(24, 74, 851, 577);

    g.setColor(Color.BLACK);
    g.fillRect(25, 75, 850, 575);   

    rightmouth = new ImageIcon("rightmouth.png");
    rightmouth.paintIcon(this, g, snakexlength[0], snakeylength[0]);


    for(int a = 0; a < lengthofsnake;a++) {
    if(a==0&& right) {
        rightmouth = new ImageIcon("rightmouth.png");
        rightmouth.paintIcon(this, g, snakexlength[a], snakeylength[a]);
    }   

    if(a==0&& left) {
        leftmouth = new ImageIcon("leftmouth.png");
        leftmouth.paintIcon(this, g, snakexlength[a], snakeylength[a]);
    }   
    if(a==0&& up) { 
        upmouth = new ImageIcon("upmouth.png");
        upmouth.paintIcon(this, g, snakexlength[a], snakeylength[a]);
    }
    if(a==0&& down) {
        downmouth = new ImageIcon("downmouth.png");
        downmouth.paintIcon(this, g, snakexlength[a], snakeylength[a]);
    }
    if(a!=0) {

        snakeimage = new ImageIcon("snakeimage.png");
        snakeimage.paintIcon(this, g, snakexlength[a], snakeylength[a]);
    }



    }   


    g.dispose();    

    }





    public void actionPerformed(ActionEvent e) {
    timer.start();  

    if(right) {
     for(int r =lengthofsnake-1;r>=0;r--) {

    snakeylength[r+1] = snakeylength[r];    
    }
     for(int r = lengthofsnake ; r>=0;r--) {
    if(r==0) {
            snakexlength[r] = snakexlength[r]+25;       
        }
    else {
            snakexlength[r] = snakexlength[r-1];
                    }
    if(snakexlength[r] > 850) {
        snakexlength[r]=25;
      }
    }
  repaint();
    }


    if(left) {
         for(int r =lengthofsnake-1;r>=0;r--) {

                snakeylength[r+1] = snakeylength[r];    
                }
                 for(int r = lengthofsnake ; r>=0;r--) {
                if(r==0) {
                        snakexlength[r] = snakexlength[r]-25;       
                    }
                else {
                        snakexlength[r] = snakexlength[r-1];
                                }
                if(snakexlength[r] < 850) {
                    snakexlength[r]=25;
                  }
                }
              repaint();
                }

    if(up) {
        for(int r =lengthofsnake-1;r>=0;r--) {

            snakexlength[r+1] = snakexlength[r];    
            }
             for(int r = lengthofsnake ; r>=0;r--) {
            if(r==0) {
                    snakeylength[r] = snakeylength[r]+25;       
                }
            else {
                    snakeylength[r] = snakeylength[r-1];
                            }
            if(snakeylength[r] < 75) {
                snakeylength[r]= 625;
              }
            }
             repaint();
     }
    if(down) {
        for(int r =lengthofsnake-1;r>=0;r--) {

            snakexlength[r+1] = snakexlength[r];    
            }
             for(int r = lengthofsnake ; r>=0;r--) {
            if(r==0) {
                    snakeylength[r] = snakeylength[r]-25;       
            }
            else {
                    snakeylength[r] = snakeylength[r-1];
                            }
            if(snakeylength[r] > 625) {
                snakeylength[r]= 75;
              }
            }
             repaint();  
     }

    }







    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub

    }




    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub

    }



    public void keyPressed(KeyEvent e) {

        if(e.getKeyCode() == KeyEvent.VK_D) {
        moves++;
        right = true;

        if(!left) {
        right = true;
        }

        else {
        right=false;
        left=true;
        }
        up = false;
        down=false;
        }

        if(e.getKeyCode() == KeyEvent.VK_A) {
            moves++;
            left = true;

            if(!right) {
            left = true;
            }

            else {
            left=false;
            right=true;
            }
            up = false;
            down=false;
            }

        if(e.getKeyCode() == KeyEvent.VK_W) {
            moves++;
            up = true;

            if(!down) {
            up = true;
            }

            else {
            up=false;
            down=true;
            }
            left = false;
            right=false;
            }


        if(e.getKeyCode() == KeyEvent.VK_S) {
            moves++;
            down = true;

            if(!up) {
            down = true;
            }

            else {
            down=false;
            up=true;
            }
            left = false;
            right=false;
            }
        repaint();
    }







    }

1010 * Основной * это мой главный package com.tutorial.main; import java.awt.Color; import javax.swing.JFrame; public class Main { public static void main(String[] args) { JFrame obj = new JFrame(); Gameplay gameplay = new Gameplay(); obj.setFocusable(true); obj.setBounds(10,10,905,700); obj.setBackground(Color.DARK_GRAY); obj.setResizable(false); obj.setVisible(true); obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); obj.add(gameplay); } }

1 Ответ

0 голосов
/ 31 января 2019

Вы забыли @Override до нажатия клавиши

...