Member 13489259 Ответов: 1

Как я могу исправить мертвый код, подобный этому i++, и некоторые повторяющиеся проблемы


Я постоянно получаю ошибку, которая говорит мертвый код на моем i++, что я оставлю комментарий на Я пытаюсь сделать змеиную игру, но я не могу решить этот мертвый код также я получаю дубликат пищи по какой-то причине я прошел через это снова и снова, не стесняйтесь запустить это и посмотреть, что работает

package Snake;

import java.awt.Color;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Snake extends JFrame implements KeyListener, Runnable{
	
	private JPanel p = new JPanel();
	
	private final int WIDTH = 450;
	private final int HEIGHT = 450;
	
	//Snake Properties
	private JButton[] lb = new JButton[200];
	private int x = 500, y = 500;
	private int gu = 3;
	private int directionX = 1, directionY = 0, oldX, oldY;
	private final int speed = 50;
	
	//Snake Coordinates
	private int [] snake_X = new int [300];
	private int [] snake_Y = new int [300];
	
	//Snake Movements
	private boolean move_left = false;
	private boolean move_right = false;
	private boolean move_up = false;
	private boolean move_down = false;
	
	private Point[] Snake_Point = new Point[300];
	private boolean food = false;
	private int score = 0;
	private boolean game_over = false;
	
	//Start Thread
	Thread thread;
	Random r = new Random();
	
	public Snake(){
		super("Snake");
		setSize(WIDTH, HEIGHT);
		setLocationRelativeTo(null);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		starting_Snake();
		
		p.setLayout(null);
		p.setBackground(Color.BLACK);
		
		
		
		add(p);
		show();
		
		initializeValues();
		addKeyListener(this);
		
		thread = new Thread(this);
		thread.start();
		
	}
	

	
	public void initializeValues(){
		gu = 3;
		snake_X[0] = 100;
		snake_Y[0] = 150;
		directionX = 10;
		directionY = 0;
		food = false;
		score = 0;
		move_left = false;
		move_right = true;
		move_up = true;
		move_down = true;
	}
	
	public void starting_Snake(){
		for(int i = 0; i < gu; i++){
			lb[i] = new JButton("lb" + i);
			lb[i].setEnabled(false);
			p.add(lb[i]);
			
			lb[i].setBounds(snake_X [i], snake_Y [i], 10, 10);
			snake_X[i+1] = snake_X[i] = snake_X[i] - 10;
			snake_Y[i+1] = snake_Y[i];
		}
		
	}
	
	public void reset(){
		initializeValues();
		p.removeAll();
		
		thread.stop();
		
		starting_Snake();
		thread = new Thread(this);
		thread.start();	
	}
	// Snake gets bigger
	public void growUp(){
		lb[gu] = new JButton();
		lb[gu].setEnabled(false);
		p.add(lb[gu]);
		
		int x = 10 + (10 * r.nextInt(44));
		int y = 10 + (10 * r.nextInt(44));
		
		snake_X[gu] = x;
		snake_Y[gu] = y;
		lb[gu].setBounds(x, y, 10, 10);
		gu++;
	}
	public void move_Forward(){
		for(int i = 0; i < gu; i++){
			Snake_Point[i] = lb[i].getLocation();
		}
		
		snake_X[0] += directionX;
		snake_Y[0] += directionY;
		lb[0].setBounds(snake_X[0], snake_Y[0], 10, 10);
		

		// dead code           ↓
		for(int i = 1; i < gu; i++){
			lb[i].setLocation(Snake_Point[i - 1]); 
			
			
			//logic for snake movements
			if(snake_X[0] == x){
				snake_X[0] = 10;
			}else if(snake_X[0] == 0){
			    snake_X[0] = x - 10;
		   }else if(snake_Y[0] == y){
			   snake_Y[0] = 10;
		   }else if(snake_Y[0] == 0){
			   snake_Y[0] = y - 10;
		   }
			//increase score when snake gets food
			if(snake_X[0] == snake_X[gu - 1] && snake_Y[0] == snake_Y[gu-1]){
				food = false;
				score += 5;
				System.out.println("Score: "+ score);
			
				//generates food when false
			}
			if(food == false){
				growUp();
				food = true;
			}else{
				lb[gu - 1].setBounds(snake_X[gu - 1], snake_Y[gu - 1] , 10, 10);
			}
			for (int i1 = 1; i1 < gu; i1++){
				
				if(Snake_Point[0] == Snake_Point[i1]){
					System.out.println("GAME OVER!!!:  "+ score);
				}
				try{
					thread.join();
				}catch(Exception e){
				
				}
			}
			break;
		}
		p.repaint();
		show();
	}
	
	@Override
	public void run() {
		// Starts game by moving snake
	
		while(!game_over){
			move_Forward();
			
			try{
				Thread.sleep(speed);
			}catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	
	}
	@Override
	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
	}
        @Override
		public void keyPressed( KeyEvent e) {
		// TODO Auto-generated method stub
		
        	//Moving Left
        	if(move_left == true && e.getKeyCode() == 37){
		    directionX = -10;
		    directionY = 0;
		    move_right = false;
		    move_up = true;
		    move_down = true;
		    System.out.println("MOVING LEFT");
		    
		    //Moving UP
		}	if(move_up == true && e.getKeyCode() == 38){
		    directionX = 0;
		    directionY = -10;
		    move_right = true;
		    move_left = true;
		    move_down = false;
		    System.out.println("MOVING UP");
		
		    //Moving RIGHT
		}	if(move_right == true && e.getKeyCode() == 39){
		    directionX = 10;
		    directionY = 0;
		    move_left = false;
		    move_up = true;
		    move_down = true;
		    System.out.println("MOVING RIGHT");
		
		    //Moving DOWN
		}	if(move_down == true && e.getKeyCode() == 40){
		    directionX = 0;
		    directionY = 10;
		    move_right = true;
		    move_up = false;
		    move_left = true;
		    System.out.println("MOVING DOWN");
	
		
		}
	}
	


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

	
		
	}


Что я уже пробовал:

переставляя его и удаляя но он мне нужен я также искал дубликат кода

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы. Так что же вы имеете в виду, и что вы на самом деле пытаетесь сделать?
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

OriginalGriff

Это все еще ничего не значит для нас: где вы получаете сообщения "мертвого кода", и что такое точное сообщение об ошибке?

Перестаньте пытаться печатать как можно меньше: это будет намного быстрее, если вы дадите нам актуальную информацию!

Richard MacCutchan

Каково точное и полное сообщение об ошибке?

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Я постоянно получаю ошибку, которая говорит о мертвом коде на моем i++

Смысл "мертвого кода" в том, что этот код никогда не будет выполнен.
for(int i = 1; i < gu; i++){

При компиляции часть "i++" перемещается в конец цикла, но:
for(int i = 1; i < gu; i++){
    ...
    break;
}

никогда не будет петли !
Итак: Мертвый Код.