Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 15 von 83 Treffern Seiten (6): [1] 2 3 nächste » ... letzte »
Autor Beitrag
Thema: Algorithmus für Bewegungen
Tommy1234

Antworten: 5
Hits: 329
18.05.2019 09:27 Forum: Praktische Informatik


Ok. Habs. Geschlossen.
Thema: Array erstellen
Tommy1234

Antworten: 1
Hits: 361
14.05.2019 23:13 Forum: Praktische Informatik


Sind das wirklich 4 m² oder doch eher 40 m²?
Thema: Algorithmus für Bewegungen
Tommy1234

Antworten: 5
Hits: 329
13.05.2019 21:37 Forum: Praktische Informatik


Ich hab gerade erst die Tragweite meiner Frage verstanden.
Nach ein bisl googeln findet man ein paar bloqs und articles zu dem Thema. Dieses ist ziemlich komplex und vor allem die gruppenbewegung sowie Formationen sind alles andere als einfach zu implementieren. Deshalb hier die Frage:
Hat hier jemand gruppenbewegung sowie Formationen auf einem 2d grid schon mal implementiert oder das zumindest mal versucht hat und evtl ein paar Tipps dazu geben kann?
Thema: Algorithmus für Bewegungen
Tommy1234

Antworten: 5
Hits: 329
05.05.2019 21:21 Forum: Praktische Informatik


Hallo nochmal,

also sie laufen jetzt hintereinander her.
Ich denke, dass ich jetzt weiterkomme mit Formationen usw. . Danke für die Idee.
Thema: Algorithmus für Bewegungen
Tommy1234

Antworten: 5
Hits: 329
28.04.2019 11:17 Forum: Praktische Informatik


Hi danke für die Antwort.
Ich habs implementiert, das Problem an der Sache ist nur, dass der Pfad zur Laufzeit stets abgefragt werden muss , damit die nächste Einheit immer das letzte tile des Vorgängers als ziel hat. Und bei 12 Einheiten tut sich Garnichts mehr extreme laggs. Hier mal der Code:

zum Einen die Implementiterung der eigentlichen Bewegung:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:

public void move() {
		
		lastx = x;
		lasty = y;
		
		if(path != null) {
			if(path.size() > 0) {
				
				Tile tile = path.get(path.size()-1);
					
				int tx = Tools.toScreenX(tilex,tiley)-16;
				int ty = Tools.toScreenY(tilex,tiley);
					
				if(x < tx && y == ty) {
					x+=xspeed;
					direction = 2;
					move = getFrame(move,10,14,4);
					lasttilex = tilex-1;
					lasttiley = tiley+1;
				}
				
				else if(y < ty && x == tx) {
					y+=yspeed;
					direction = 4;
					move = getFrame(move,5,9,4);
					lasttilex = tilex-1;
					lasttiley = tiley-1;
				}
				
				else if(x > tx && y == ty) {
					x-=xspeed;
					direction = 6;
					move = getFrame(move,15,19,4);
					lasttilex = tilex+1;
					lasttiley = tiley-1;
				}
					
				else if(y > ty && x == tx) {
					y-=yspeed;
					direction = 0;
					move = getFrame(move,0,4,4);
					lasttilex = tilex+1;
					lasttiley = tiley+1;
				}
					
				else if(x < tx && y < ty) {
					x+=xspeed;
					y+=yspeed/2;
					direction = 3;
					move = getFrame(move,30,34,4);
					lasttilex = tilex-1;
					lasttiley = tiley;
				}
				
				else if(y < ty && x > tx) {
					x-=xspeed;
					y+=yspeed/2;
					direction = 5;
					move = getFrame(move,35,39,4);
					lasttilex = tilex;
					lasttiley = tiley-1;
				}
					
				else if(x > tx && y > ty) {
					x-=xspeed;
					y-=yspeed/2;
					direction = 7;
					move = getFrame(move,25,29,4);
					lasttilex = tilex+1;
					lasttiley = tiley;
				}
					
				else if(y > ty && x < tx) {
					x+=xspeed;
					y-=yspeed/2;
					direction = 1;
					move = getFrame(move,20,24,4);
					lasttilex = tilex;
					lasttiley = tiley+1;
				}
					
				else if(y == ty && x == tx){
					IsometricMap.tiles[tilex][tiley].setUnit(false);
					tilex = tile.getX();
					tiley = tile.getY();
					IsometricMap.tiles[tilex][tiley].setUnit(true);
					
					path.remove(tile);
				}
				
			}
			else {
				
				
				
			}
			
			//System.out.println(tilex + "   " + lasttilex + "   " + tiley + "   " + lasttiley);
		}
	}


und zum anderen die Koordination der Einheiten:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:

for(int i = 0;i<entities.size();i++) {
			for(int j = entities.size()-1;j>i;j--) {
				if(entities.get(i).marked) {
					if(MouseInput.right) {
						entities.get(i).mousex = entities.get(j).mousex = Game.rightx;
						entities.get(i).mousey = entities.get(j).mousey = Game.righty;
						
					}
					entities.get(i).path = IsometricMap.findPath(entities.get(i).tilex,entities.get(i).tiley,entities.get(i).mousex,entities.get(i).mousey);
					entities.get(j).path = IsometricMap.findPath(entities.get(j).tilex,entities.get(j).tiley,entities.get(j).mousex,entities.get(j).mousey);
					if(entities.get(i).path != null && entities.get(j).path != null) {
						if(entities.get(i).path.size() <= entities.get(j).path.size()) {
							entities.get(i).move();
							if(entities.get(i).tilex != entities.get(i).lasttilex || entities.get(i).tiley != entities.get(i).lasttiley) {
								entities.get(j).path = IsometricMap.findPath(entities.get(j).tilex,entities.get(j).tiley,entities.get(i).lasttilex,entities.get(i).lasttiley);
								entities.get(j).move();
							}
						}
						else if(entities.get(j).path.size() <= entities.get(i).path.size()) {
							entities.get(j).move();
							if(entities.get(j).tilex != entities.get(j).lasttilex || entities.get(j).tiley != entities.get(j).lasttiley) {
								entities.get(i).path = IsometricMap.findPath(entities.get(i).tilex,entities.get(i).tiley,entities.get(j).lasttilex,entities.get(j).lasttiley);
								entities.get(i).move();
							}
						}	
					}
				}
			}
		}



Wie erreicht man da niedrigere Frameraten ( denglisch XD).

Wäre für Hilfe dankbar.
Thema: Algorithmus für Bewegungen
Tommy1234

Antworten: 5
Hits: 329
Algorithmus für Bewegungen 02.04.2019 19:36 Forum: Praktische Informatik


Hallo, steh auf dem Schlauch. Ich möchte auf einem 2d grid spielfiguren bewegen und zwar nacheinander. Das heißt, dass man via mausrahmen Einheiten markieren kann (siehe Age of Empires) anschließend wird geklickt, und damit der Pfad generiert und schließlich die Einheit bewegt. Ich möchte nun einen Algorithmus in Java schreiben der die Einheiten nacheinander bewegt abhängig vom kürzesten Pfad aller markierten Einheiten. Ich halte die Einheiten in einer ArrayList und berechne mir den Index der Einheit mit dem kürzesten Pfad.
Jetzt dachte ich mir wenn das letzte Feld eben dieser Einheit freigegeben wurde, dann bewege ich die nächste usw..
Meine Frage ist nun wie setzt man das im Sinne eines guten Algorithmus um?

Wäre für Hilfe sehr dankbar.

Gruß Tommy
Thema: Logikfrage
Tommy1234

Antworten: 1
Hits: 325
Logikfrage 27.01.2019 15:57 Forum: Theoretische Informatik


Hallo,

ich schäme mich zwar irgendwie dafür aber ich frage trotzdem kurz:

ich habe 3 radiobuttons, die per klick selektiert werden und demzufolge die beiden zustände selektiert bz unselektiert.

wie erreiche ich nun, dass man immer mindestens einen button markiert lässt, während die anderen beiden unselktiert bleiben?

Das ganze is in java.

Sorry ich checks einfach nicht.

Wäre für hilfe dankbar.

Hier noch kurz ein snippet:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:


if(radiobuttons[0].isSelected()&&radiobuttons[1].isSelected()&&radiobuttons[2].isSelected()) {
			
			if(!radiobuttons[1].isSelected() && !radiobuttons[2].isSelected()) {
				radiobuttons[0].setSelected(true);
				radiobuttons[1].setSelected(false);
				radiobuttons[2].setSelected(false);
			}
			if(!radiobuttons[0].isSelected() && !radiobuttons[2].isSelected()) {
				radiobuttons[0].setSelected(false);
				radiobuttons[1].setSelected(true);
				radiobuttons[2].setSelected(false);
			}
			if(!radiobuttons[0].isSelected() && !radiobuttons[1].isSelected()) {
				radiobuttons[0].setSelected(false);
				radiobuttons[1].setSelected(false);
				radiobuttons[2].setSelected(true);
			}
		}




Die anfangszustände sind jeweils true. Lässt sich aber beliebig für jeden Button euinfach ändern.
Thema: Array regelmäßig füllen
Tommy1234

Antworten: 0
Hits: 334
Array regelmäßig füllen 31.07.2018 21:21 Forum: Praktische Informatik


Hallo,

gleich zur Sache:

ich möchte ein Array mit Werten füllen, die in einer bestimmten Abhängigkeit zueinander stehen sollen.

Im Grunde genommen ist dieser Wert 1. Ich brauche allerdings einen spezifischeren Wert wie z.B. 0.2. Zu diesem Wert soll an bestimmten Stellen im Array die Hälfte des Wertes addiert oder subtrahiert werden. Wenn ein Wert an der gewünschten Stelle geschrieben wurde, soll dieser wiederum als Grundlage für den nächsten Wert gelten.


Das ganze möchte ich so machen, weil ich keine Lust habe alle Werte einzeln einzugeben.

hier mal die angefangene Reihe "gehardcodet":

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:

float scl = 0.2f;

float[] vertices = {

				0f, 0f, 0f,//v0
				0f, -scl, 0f,//v1
				scl/2, 0f, 0f,//v2
				scl/2, -scl, 0f,//v3
				scl, 0f, 0f,//v4
				scl, -scl, 0f,//v5
				scl+scl/2, 0f, 0f,//v6
				scl+scl/2, -scl, 0f,//v7
				scl+scl, 0f, 0f,//v8
				scl+scl, -scl, 0f,//v9
				scl+scl+scl/2, 0f, 0f,//v10
				scl+scl+scl/2, -scl, 0f,//v11
				0f, -scl-scl, 0f,//v12
				scl/2, -scl-scl, 0f,//v13
				scl/2, -scl-scl, 0f,//v12
				scl, -scl-scl, 0f,//v13
				
		};

		int[] indices = {
				
				1,0,2,
				3,1,2,
				
				3,2,4,
				5,3,4,
				
				5,4,6,
				7,5,6,
				
				7,6,8,
				9,7,8,
				
				9,8,10,
				11,9,10,
				
				12,1,3,
				13,12,3,
				
				14,3,5,
				15,14,5
		};


Ich hoffe jemand findet da ne Lösung dafür.

Das ganze soll jeweils eine Methode machen mit jeweils einem eindimensionalen Floatarray als Rückgabetyp.

Gruß Tommy
Thema: Matrixarrays multiplizieren
Tommy1234

Antworten: 4
Hits: 594
20.07.2018 14:14 Forum: Praktische Informatik


Ok, habs gerade gewschafft, melde mich aber hier nochmal wegen view sowie projektionsmatrix.....
Thema: Matrixarrays multiplizieren
Tommy1234

Antworten: 4
Hits: 594
20.07.2018 13:29 Forum: Praktische Informatik


Hallo,

körpertransformationen gehen jetzt allerdings nur translation und skalierung.

Ich möchte den körper auch drehen können, allerdings ist die Dreheung meiner meinung nach falsch, denn er dreht sich nur um zwei punkte mit minimaler abweichung.


Ganzer kompilierbarer Code im Anhang.
Thema: Matrixarrays multiplizieren
Tommy1234

Antworten: 4
Hits: 594
19.07.2018 19:58 Forum: Praktische Informatik


Nachtrag:

Matrix Input: 1 0 0 1.5
0 1 0 1.0
0 0 1 1.5
0 0 0 1

Vektor Input: x= 0 , y= 1.0, z=0 , t=1

bekomme so anstatt 1,5 2 1,5 1 ein anderes Ergebnis nämlich 0 2 0 1
Thema: Matrixarrays multiplizieren
Tommy1234

Antworten: 4
Hits: 594
Matrixarrays multiplizieren 19.07.2018 19:55 Forum: Praktische Informatik


Hallo,

ich habe eine 4x4 Matrix als zweidimensionales Array sowie einen Vektor (Größe 4) als eindimensionales Array vorliegen.

Wie multipliziert man die beiden so, dass wieder ein Vektor entsteht?

Ansatz:


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

public static Vector3D multipliziereMatrixmitVector(Matrix a,Vector3D b) {
		
	int m = a.getColumns();
	int n = a.getRows();
	    
	Vector3D vec = new Vector3D(4,0.0f,0.0f,0.0f,0.0f);
	    
	 for (int spalte = 0; spalte < m; spalte++) {
	    for (int zeile = 0; zeile < n; zeile++) {
	         vec.vector[zeile] +=  (a.getMatrix()[zeile][spalte] * b.vector[zeile]);
	    }
	}
	    
        return vec;
}



Die Matrix wird mir korrekt auf der Konsole ausgegeben.

Wäre für Hilfe dankbar.

Gruß Tommy
Thema: ProjectionsMatrix
Tommy1234

Antworten: 1
Hits: 500
11.05.2018 18:53 Forum: Praktische Informatik


Hallo nochmal,

habs mathematisch und vor allem auch grafisch hinbekommen. Also Thema geschlossen das Ding läuft.
Thema: ProjectionsMatrix
Tommy1234

Antworten: 1
Hits: 500
ProjectionsMatrix 07.05.2018 22:37 Forum: Praktische Informatik


Hallo,

ich versuche grade ein Terrain mit Punkten und Linien zu generieren.

Das Problem dabei ist, dass ich zwar richtig rotieren kann, aber die Perspektive stimmt nicht, will heißen beim drehen eines Quadrats ist der vordere Teil ( der Teil der auf mich zukommt) größer als der hintere. Und genau das bekomm ich nicht hin.

Hier der Code:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
private int w = 1024;
	private int h = 768;
	private int scl = 50;
	private int cols = w/scl;
	private int rows = h/scl;
	
	private Point3D[] p = new Point3D[5];
	private Point3D[] pnew = new Point3D[5];
	private Point projection = null;
	
	int angle = 0;
	double angle_x = 0.001;
    double angle_y = 0.001;
    double angle_z = 0.001;
    
    double px,py,pz;
    
	public Terrain() {
		addKeyListener(new KeyInput());
		setFocusable(true);
		requestFocus();
		initTerrain();
	}

	private void initTerrain() {
		p[0] = new Point3D(0,0,0);
		p[1] = new Point3D(-scl,-scl,0);
		p[2] = new Point3D(scl,-scl,0);
		p[3] = new Point3D(scl,scl,0);
		p[4] = new Point3D(-scl,scl,0);
		
		for(int k = 1;k<p.length;k++) {
			pnew[k] = new Point3D(p[k].x,p[k].y,p[k].z);
		}
		
		projection = new Point(0,0);
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponents(g);
		
		g.clearRect(0, 0, getWidth(), getHeight());
		
		g.translate(getWidth()/2, getHeight()/2);
		
		if(KeyInput.right) {
			angle_x+=Math.PI/3;
			for(int k = 1;k<p.length;k++) {
				
				px = pnew[k].x;
				py = pnew[k].y;
				pz = pnew[k].z;
				
				pnew[k].y = (py*Math.cos(angle_x)-pz*Math.sin(angle_x));
			    pnew[k].z = (py*Math.sin(angle_x)+pz*Math.cos(angle_x));
			    
			    //Projectionspunkte berechnen
			    projection.x = (int)(((pnew[k].x*getWidth()/2)/pnew[k].z)+getWidth()/2)/1000;
			    projection.y = (int)(((pnew[k].y*getHeight()/2)/pnew[k].z)+getHeight()/2)/1000;
			    
			    System.out.println(projection.x);
			}
		}
		
		if(KeyInput.left) {
			angle_y+=0.001;
			for(int k = 1;k<p.length;k++) {
				
				px = pnew[k].x;
				py = pnew[k].y;
				pz = pnew[k].z;
				
		        pnew[k].x = px*Math.cos(angle_y)+pz*Math.sin(angle_y);
		        pnew[k].z =-px*Math.sin(angle_y)+pz*Math.cos(angle_y);
		    }
		}
		
		if(KeyInput.up) {
			angle_z+=0.001;
			for(int k = 1;k<p.length;k++) {
				
				px = pnew[k].x;
				py = pnew[k].y;
				pz = pnew[k].z;
				
	        	pnew[k].x = px*Math.cos(angle_z)-py*Math.sin(angle_z);
	            pnew[k].y = py*Math.cos(angle_z)+px*Math.sin(angle_z);
	            
	        }
		}
		
		for(int y = 0;y<1;y++) {
			for(int x = 0;x<1;x++) {
				g.drawLine((int)(pnew[1].x+(x*scl))+projection.x,(int)(pnew[1].y+(y*scl))+projection.y,(int)(pnew[2].x+(x*scl))+projection.x,(int)(pnew[2].y+(y*scl))+projection.y);
				g.drawLine((int)(pnew[2].x+(x*scl))+projection.x,(int)(pnew[2].y+(y*scl))+projection.y,(int)(pnew[3].x+(x*scl))+projection.x,(int)(pnew[3].y+(y*scl))+projection.y);
				g.drawLine((int)(pnew[3].x+(x*scl))+projection.x,(int)(pnew[3].y+(y*scl))+projection.y,(int)(pnew[4].x+(x*scl))+projection.x,(int)(pnew[4].y+(y*scl))+projection.y);
				g.drawLine((int)(pnew[4].x+(x*scl))+projection.x,(int)(pnew[4].y+(y*scl))+projection.y,(int)(pnew[1].x+(x*scl))+projection.x,(int)(pnew[1].y+(y*scl))+projection.y);
				
			}
		}
		
//		g.drawLine((int)(pnew[1].x),(int)(pnew[1].y),(int)(pnew[2].x),(int)(pnew[2].y));
//    	g.drawLine((int)(pnew[2].x),(int)(pnew[2].y),(int)(pnew[3].x),(int)(pnew[3].y));
//    	g.drawLine((int)(pnew[3].x),(int)(pnew[3].y),(int)(pnew[4].x),(int)(pnew[4].y));
//    	g.drawLine((int)(pnew[4].x),(int)(pnew[4].y),(int)(pnew[1].x),(int)(pnew[1].y));
//    	
//    	g.drawLine((int)(pnew[5].x),(int)(pnew[5].y),(int)(pnew[6].x),(int)(pnew[6].y));
//    	g.drawLine((int)(pnew[6].x),(int)(pnew[6].y),(int)(pnew[7].x),(int)(pnew[7].y));
//    	g.drawLine((int)(pnew[7].x),(int)(pnew[7].y),(int)(pnew[8].x),(int)(pnew[8].y));
//    	g.drawLine((int)(pnew[8].x),(int)(pnew[8].y),(int)(pnew[5].x),(int)(pnew[5].y));
//    	
//    	g.drawLine((int)(pnew[1].x),(int)(pnew[1].y),(int)(pnew[5].x),(int)(pnew[5].y));
//    	g.drawLine((int)(pnew[2].x),(int)(pnew[2].y),(int)(pnew[6].x),(int)(pnew[6].y));
//    	g.drawLine((int)(pnew[3].x),(int)(pnew[3].y),(int)(pnew[7].x),(int)(pnew[7].y));
//    	g.drawLine((int)(pnew[4].x),(int)(pnew[4].y),(int)(pnew[8].x),(int)(pnew[8].y));
		
    	try {
			Thread.sleep(100);
		} catch (InterruptedException e) {e.printStackTrace();}
    	
		//repaint();
	}

	public static void main(String[] args) {
		JFrame window = new JFrame();
    	window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		window.setSize(1024,768);
		window.add(new Terrain());
		window.setLocationRelativeTo(null);
		window.setVisible(true);
	}
h
Thema: Listen mit mehreren Listen
Tommy1234

Antworten: 3
Hits: 540
12.04.2018 14:15 Forum: Praktische Informatik


Ich programmiere in Java .

Zur Sache:

sagen wir ich habe fünf Arbeiter , drei Nahkampfeinheiten sowie 4 Fernkampfeinheiten nacheinander der Liste hinzugefügt, also die sind jetzt in dieser Spriteliste. Das habe ich erreicht, indem ich .add(new Arbeiter()) usw.aufgerufen habe. Jetzt möchte ich, dass der Arbeiter Holz hackt ein weiterer Gold sammelt und ein Soldat einen Gegner angreift. Diese 3 Methoden sind Unterklassenspezifisch und können irgendwie bei mir nicht aufgerufen werden.

Wie Du vielleicht schon bemerkt hast, handelt es sich bei mir um ein Spiel und die beiden Methoden update() sowie render() (Spielschleife) sind als abstrakte Methoden in der Oberklasse (Spriteklasse) deklariert und somit für die Unterklassen verfügbar.

Momentan verwalte ich jeden Spritetyp wieder in einer eigenen Liste. Ist halt mehr Schreibarbeit, ABER mir wurde erklärt, dass es für mein Spiel besser wäre, die Einheiten nacheinander zu bewegen also prioritär. Und eben dies wäre halt in einer einzigen großen Einheitenliste einfacher umzusetzen denke ich.

Ich hoffe das reicht DIR.
Zeige Beiträge 1 bis 15 von 83 Treffern Seiten (6): [1] 2 3 nächste » ... letzte »