Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Problem]Java Aplet, gra Sokoban


GGG205

Rekomendowane odpowiedzi

Opublikowano

Witam was, oto moja pierwsza gra sokoban, jedyne co robi to rysuje mape i chcę na razie zrobić by postać się poruszała, lecz nie daje rady.

W C++ robiłem coś takiego:

        Player move(Player& ptw)
	{
                char key = getch();

		switch(key)
		{
		case 'w': ptw.pozY--; break;
		case 's': ptw.pozY++; break;
		case 'a': ptw.pozX--; break;
		case 'd': ptw.pozX++; break;
		}
		return level1[ptw.pozY][ptw.pozX];
	}

Pisałem na szybko !

 

A tu cały kod z Javy:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;

class Maps
{
	public int level1[][] = new int[10][10];
	
	public void CreateMap(){
		int Vlevel1[][] = {{1,1,1,1,1,1,1,1,1,1},
				           {1,4,0,0,0,0,0,1,1,1},
				           {1,0,1,1,0,1,1,0,1,1},
				           {1,0,1,1,0,2,0,0,1,1},
				           {1,0,0,1,1,1,1,0,1,1},
				           {1,0,0,0,0,0,0,0,1,1},
				           {1,0,0,1,0,0,1,0,1,1},
				           {1,0,2,0,1,1,1,0,1,1},
				           {1,0,0,0,1,3,3,3,1,1},
				           {1,1,1,1,1,1,1,1,1,1}};
		
		for(int i = 0; i < level1.length; i++){
			for(int j = 0; j < level1[0].length; j++){
				level1[i][j] = Vlevel1[i][j];
			}
		}
	}
	
}

class Event extends TimerTask
{
	int pozX = 1;
	int pozY = 1;
	
	public void run(){
		Main.applet.repaint();
	}
	
	public int move(Event e, Maps s, char key)
	{
		switch(key)
		{
		case 'w': pozY--; break;
		case 's': pozY++; break;
		case 'a': pozX--; break;
		case 'd': pozX++; break;
		}
		return s.level1[pozY][pozX];
	}
}

public class Main extends Applet implements KeyListener{
	
	public static Applet applet;
	public Maps lvl1;
	public Event evt;
	public Timer timer;
	
	public void init(){
		applet = this;
		applet.setSize(500,500);
		applet.setBackground(Color.BLACK);
		
		lvl1 = new Maps();
		lvl1.CreateMap();
		
		evt = new Event();
		
		timer = new Timer();
		timer.scheduleAtFixedRate(evt, 5, 5);
	}
	
	public void paint(Graphics g){
		DrawMap(g);
	}
	
	public void DrawMap(Graphics g){
		
		for(int i = 0; i < lvl1.level1.length; i++){
			for(int j = 0; j < lvl1.level1[0].length; j++){
				switch(lvl1.level1[i][j])
				{
				case 0: g.setColor(Color.GRAY);
				        g.fillRect(30 * j, 30 * i, 30, 30); break;
				case 1: g.setColor(Color.RED);
		                g.fillRect(30 * j, 30 * i, 30, 30); break;
				case 2: g.setColor(Color.ORANGE);
		                g.fillOval(30 * j, 30 * i, 30, 30); break;
				case 3: g.setColor(Color.GREEN);
		                g.fillRect(30 * j, 30 * i, 30, 30);break;
				case 4: g.setColor(Color.YELLOW);
		                g.fillOval(30 * j, 30 * i, 30, 30); break;
				}
			}
		}
		
	}

	@Override
	public void keyPressed(KeyEvent e) {
		
		switch(e.getKeyChar())
		{
		case 'w': evt.move(lvl1, 'w'); break;
		case 'a': evt.move(lvl1, 'a'); break;
		case 's': evt.move(lvl1, 's'); break;
		case 'd': evt.move(lvl1, 'd'); break;
		}
		
	}

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

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

}


Konsolowe aplikacje w javie piszę bez problemu, a tu trochę zamieszania dla mnie jest.

Więc jeszcze raz proszę o pomoc z tym poruszaniem się.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...