Promosyon
Unibersidad ng Java
Pag-aaral
Mga kurso
Mga gawain
Mga Survey at Pagsusulit
Mga laro
Tulong
Iskedyul
Internship
Komunidad
Mga gumagamit
Forum
Chat
Mga artikulo
Mga kwento ng tagumpay
Aktibidad
Mga pagsusuri
Mga subscription
Banayad na tema
Artikulo
  • Mga pagsusuri
  • Tungkol sa atin
  • CS50
Magsimula
Simulan ang pag-aaral
  • Mga artikulo
  • Mga may-akda
  • Lahat ng grupo
  • Listahan ng Lahat ng Artikulo
JavaRush /Java Blog /Random-TL /Iyong sariling console race)
Olegator3
Antas
  • 28 February 2021
  • 239 views
  • 0 comments

Iyong sariling console race)

Nai-publish sa grupo
Telegram
Mula nang magsimula ang malalaking gawain, pinahirapan ako ng tanong na: "Magagawa ko rin ba ang isang bagay tulad ng Tetris, o isang ahas, dahil dapat bigyan nila ako ng ganito... Well, sa pangkalahatan, iniisip ko ang tungkol sa paggawa ng isang bagay na mas simple, tulad ng isang ahas o Tetris, well, ang ideya ay dumating, siyempre, mula sa magandang lumang Tetris console, mayroong isa pang laro - karera, kung natatandaan mo, kaya iyon ang dahilan kung bakit sinusulat ko ito, iminumungkahi kong mag-post "iyong malalaking proyekto" dito at pag-evaluate\improving\commenting\scolding the code, sa tingin ko ito ay nagpo-promote ng mga bagong ideya, kaya kung ayaw mo, mag-post ng iyong malalaking proyekto dito, o kahit man lang mga ideya para sa kanila. Pansamantala, ang

aking sariling proyekto ay console racing), sumulat ako nang humigit-kumulang 4 na oras, + isang oras para i-debug ang code\comments
Sino ang gustong , maaaring kopyahin ang aking code sa IDEA at suriin/laruin ang mga ito, naghihintay ako ng kahit na masamang pagsusuri, hanggang ngayon ito ay tiyak na isang maliit na kahoy, ngunit isinasaalang-alang ko ang pag-unlad na ito para sa aking sarili, na sa unang pagkakataon ay nilikha ko ang gusto ko)) https://gist.github .


com/Olegator3/3b15e51d683343740fb2

Pangunahing klase ng laro:

package com.javarush.test.level24.Race; import java.awt.event.KeyEvent; import java.util.ArrayList; /** * Created by ПК on 23.01.2015. */ public class Track { private int height; private int width; private int points = 0; private static int life = 3; private PlayerCar playerCar; private ArrayList otherCars; private boolean isGameOver; static int[][] matrix; public static Track game; public Track(int height, int width, PlayerCar playerCar, ArrayList otherCars) { this.height = height; this.width = width; matrix = new int[height][width]; this.playerCar = playerCar; this.otherCars = otherCars; } public int getHeight() { return height; } public int getWidth() { return width; } public PlayerCar getPlayerCar() { return playerCar; } public int[][] getMatrix() { return matrix; } public ArrayList getOtherCars() { return otherCars; } public static void main(String[] args)throws InterruptedException { game = new Track(20,20,new PlayerCar(8,15),new ArrayList ()); game.otherCars.add(new OtherCars()); game.otherCars.add(new OtherCars()); game.run(); } //основая игровая логика public void run() throws InterruptedException{ KeyboardObserver keyboardObserver = new KeyboardObserver(); keyboardObserver.start(); isGameOver = false; while(!isGameOver) { if (keyboardObserver.hasKeyEvents()) { //получить самое первое событие из очереди KeyEvent event = keyboardObserver.getEventFromTop(); //Если равно символу 'q' - выйти из игры. if (event.getKeyChar() == 'q') return; //Если "стрелка влево" - сдвинуть машинку влево if (event.getKeyCode() == KeyEvent.VK_LEFT) playerCar.left(); //Если "стрелка вправо" - сдвинуть машинку вправо else if (event.getKeyCode() == KeyEvent.VK_RIGHT) playerCar.right(); } if(otherCars.get(0).getY() > height){ otherCars.set(0,new OtherCars()); points++; } if(otherCars.get(1).getY() > height) { otherCars.set(1,new OtherCars()); points++; } othersCarDown(); isTouch(playerCar, otherCars); print(); Thread.sleep(300); } //если проиграл.... for(int i = 0; i < matrix.length; i++) { for (int j = 0; j< matrix[0].length; j++) { System.out.print("Х"); } System.out.println(); } System.out.println("Ты проиграл..."); System.out.println(" **** Очки: " + points +" ****"); System.out.println(" **** Жизней:" +life +" ****"); } //движения машинок вниз public void othersCarDown() { for(OtherCars cars : otherCars) cars.move(); } //отрисовка происходящего на экран public void print(){ //копируем трэк int[][] temp = new int[height][width]; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { temp[i][j] = matrix[i][j]; } } //печатаем в него другие машинки OtherCars.print(otherCars,temp); //печатаем в него машинку игрока PlayerCar.print(playerCar,temp); //печатаем поле на экран for(int i = 0; i < matrix.length; i++) { System.out.print("|"); for (int j = 0; j< matrix[0].length; j++) { if(temp[i][j] == 0) System.out.print(" "); if(temp[i][j] == 1) System.out.print("X"); } System.out.print("|"); System.out.println(); } //печать пробелов и очков System.out.println(" **** Очки: " + points +" ****"); System.out.println(" **** Жизней:" +life +" ****"); System.out.println(); System.out.println(); System.out.println(); } //Проверка на столкновения public void isTouch(PlayerCar car, ArrayList otherCars) { try { for(int i =0; i <="" car.cord.size();="" j++)="" if(othercars.get(i).cord.contains(car.cord.get(j)))="" othercars.set(i,new="" othercars());="" life--;="" }="" }catch="" (exception="" e){}="" if(life="=" 0){="" isgameover="true;" code=""> Класс машинки игрока :

package com.javarush.test.level24.Race; import java.util.ArrayList; /** * Created by ПК on 23.01.2015. */ public class PlayerCar { //координаты начальной точки int x; int y; //список координат для проверки на столкновения public ArrayList cord; //шаблон машинки public int[][] car = new int[][]{ {0,1,0}, {1,1,1}, {0,1,0}, {1,1,1}, }; public PlayerCar(int x, int y) { this.x = x; this.y = y; } public int[][] getCar() { return car; } public int getX() { return x; } public int getY() { return y; } public void left() { x--; if(!isNotEndOfTack()) x++; } public void right(){ x++; if(!isNotEndOfTack()) x--; } private boolean isNotEndOfTack(){ if(x < 0) return false; else if(x == Track.game.getWidth() - 2) return false; return true; } //Рисуем машинку в temp, которое будет нашим треком public static void print(PlayerCar car,int[][] temp){ //печатаем в него машинку игрока int[][] playercar = temp; int left = car.getX(); int top = car.getY(); int[][] carMatrix = car.getCar(); Track.game.getPlayerCar().cord = new ArrayList(); for (int i = 0; i < 4; i++) { for (int j = 0; j < 3; j++) { if (top + i >= Track.game.getHeight() || left + j >= Track.game.getWidth()) continue; if (carMatrix[i][j] == 1) playercar[top + i][left + j] = 1; car.cord.add(String.valueOf(top + i) + " " + String.valueOf(left + i)); } } } }

Класс другой машинки:

package com.javarush.test.level24.Race; import java.util.ArrayList; import java.util.Random; /** * Created by ПК on 23.01.2015. */ public class OtherCars { //координаты начальной точки private int x; private int y; //список координат для проверки на столкновения public ArrayList cord; //шаблон машинки public int[][] car = new int[][]{ {0,1,0}, {1,1,1}, {1,1,1}, {1,1,1},}; public void setCord(ArrayList cord) { this.cord = cord; } //ставит случайные координаты сверху public OtherCars() { this.x = new Random().nextInt(18); this.y = new Random().nextInt(3); } //двигает машинку вниз public void move(){ y++; } public int getX() { return x; } public int getY() { return y; } public int[][] getCar() { return car; } //Все машинки передаваемые в АррэйЛисте, рисуются в передаваему матрицу "temp" из класса Track public static void print(ArrayList otherCars, int[][] temp) { //печать другой машины for(int i =0; i< otherCars.size();i++) { int left = otherCars.get(i).getX(); int top = otherCars.get(i).getY(); int[][] otherCar = otherCars.get(i).getCar(); Track.game.getOtherCars().get(i).setCord(new ArrayList ()); for (int k = 0; k < 4; k++) { for (int j = 0; j < 3; j++) { if (top + k >= Track.game.getHeight() || left + j >= Track.game.getWidth()) continue; if (otherCar[k][j] == 1) temp[top + k][left + j] = 1; otherCars.get(i).cord.add(String.valueOf(top + k) + " " + String.valueOf(left + k)); } } } } }

Ну и конечно популярный на джавераш "наблюдатель за клавиатурой":

package com.javarush.test.level24.Race; import javax.swing.*; import java.awt.*; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; /** * Created by ПК on 24.01.2015. */ public class KeyboardObserver extends Thread { private Queue keyEvents = new ArrayBlockingQueue (100); private JFrame frame; @Override public void run() { frame = new JFrame("KeyPress Tester"); frame.setTitle("Transparent JFrame Demo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setUndecorated(true); frame.setSize(400, 400); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.setLayout(new GridBagLayout()); frame.setOpacity(0.0f); frame.setVisible(true); frame.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent e) { //do nothing } @Override public void focusLost(FocusEvent e) { System.exit(0); } }); frame.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { //do nothing } public void keyReleased(KeyEvent e) { //do nothing } public void keyPressed(KeyEvent e) { keyEvents.add(e); } }); } public boolean hasKeyEvents() { return !keyEvents.isEmpty(); } public KeyEvent getEventFromTop() { return keyEvents.poll(); } }
Python-университет
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Matuto
  • Курси програмування
  • Pagpaparehistro
  • Kurso sa Java
  • Tulong sa Mga Gawain
  • Pagpepresyo
  • Mga Proyekto sa Laro
Komunidad
  • Mga gumagamit
  • Mga artikulo
  • Forum
  • Chat
  • Mga Kwento ng Tagumpay
  • Aktibidad
kumpanya
  • Tungkol sa atin
  • Mga contact
  • Mga pagsusuri
  • FAQ
  • Suporta
JavaRush Ang JavaRush ay isang online na kurso para sa pag-aaral ng Java programming mula sa simula. Ang kursong ito ay isang perpektong paraan upang makabisado ang Java para sa mga nagsisimula. Naglalaman ito ng 1200+ na gawain na may agarang pag-verify at isang mahalagang saklaw ng teorya ng Java fundamentals. Upang matulungan kang magtagumpay sa edukasyon, nagpatupad kami ng isang hanay ng mga tampok na motibasyon: mga pagsusulit, mga proyekto sa pag-coding, nilalaman tungkol sa mahusay na pag-aaral at karera ng developer ng Java.
Sundan mo kami
Ang mga Programmer ay Ginawa, Hindi Ipinanganak © 2025 JavaRush
I-download ang App
  • Google Play
  • App Store
Mastercard Visa
Ang mga Programmer ay Ginawa, Hindi Ipinanganak © 2025 JavaRush