Strategie-Spiel

Status
Nicht offen für weitere Antworten.
Hallo!

Ich will ein Strategiespiel programmieren. Es soll so ähnlich werden wie Medieval, Rome, Hearts of Iron, oder so. Man hat halt eine Karte, wo Burgen in großer und in kleiner form daraufgebaut werden sollen, ...

Meine erste Frage wäre, ob jemand schon Erfahrung mit so was hat oder einfach nur eine Idee, wie die Strategiekarte am besten zu realisieren wäre. Ich muss halt für jede provinz ein eigenes Feld haben. Ich glaube halt, dass es nicht viel anders gehen wird, als dass ich jede provinz als eigenes Bild einfüge. Dabei stellt sich wieder das problem, dass ich dann wahrscheinlich so eine art virtuelle karte brauchen werde. Weil ja die karte nich nur auf einmal sichtbar werden soll, sondern groß sein soll und man scrollen kann.

Ein weiteres problem werde ich wahrscheinlich mit den updates auf der karte haben. Vorerst sollen einmal keine Kämpfe statt finden. Da hätt ich sowieso momentan keine ahnung wie ich das realisieren sollte. Na ja ich hoffe, dass mir im bezug auf das noch so einiges einfallen wird.

Danke schon mal für die Hilfe!

mfg,
Christian.
 
G

Guest

Gast
ich das mal gemacht (aber in C)

- karte mit vektoren gezeichnet (nodes+links), diese dann im eigenen format abgespeichert
- mit füllalo die einzelnen bereiche gefüllt (jedes land eine farbe)
- mittelpunkt der pixel eines landes bestimmt (headquater als point(x,y))

identifizierung des landes bei mausklick: wieder füllalo, bis der pixel des headquaters gefunden wurde (oder anhand der landesIDfarbe: land0="farbe" 0, land1="farbe" 1 usw.)

darstellung:
-wieder füllalgo, aber füllen mit prozeduraler textur (je nach besitzer und zustand)
-grenzen (die vektoren) auf extra bild, dieses "blurren" und auf die "grafikübersichtskarte" setzen

im prinzip hatte ich 2 karten, eine mit den pixel der landesIDfarbe und eine schönere (mit den texturen) zum anzeigen

ist zwar aufwändig, hat aber den vorteil, dass du neue karten zeichnen kannst (nodes+links) (das programm zum zeichnen halt auch selber machen), die "schöne" grafische darstellung dann von alleine gemacht wird.

fürn anfang würde ich einen füllalo (floodfill oder so) machen, dann die bereiche der länder von den headquaters aus füllen.
dazu kannst du die karte auch mit nem malprogramm zeichnen und die headquaterpunkte in ein txtfile schreiben. beim zeichnen darauf achten, dass die grenzen keine lücken haben (wegen floodfill).
 
Ich hab jetzt ein bisschen im Forum gesucht, aber leider nicht das passende gefunden. Mein Problem ist momentan, wenn der Benutzer irendwo auf das spiel klickt, dass ich mir dann das land bestimme auf das er geklickt hat. Wie kann man das machen. Ich weiß zwar wie ich mir den Punkt des Mauszeigers bestimme, aber nicht, wie ich mir das Land dann bestimmen kann. Sind ja keine Rechtecke, sondern eine Grafik.

Hoffe mir kann wer helfen!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
speicher die karte für jedes land komplett mitm malprogramm ab, bei jedem bild nur ein land stehenlassen, die anderen mit schwarz wegradieren. beim mausklick alle images durchprüfen, bei demjenigen mit pixel!=schwarz : bingo.

ist der noob-ansatz (braucht viel ram), komprimiert auf der festplatte wirds keinen unterschied machen.
 
Danke für die vielen Antworten!

Aber wie soll ich das mit den Karten machen. Ich will, dass immer alle angezeigt werden, die jemand besitzt. Aber das geht glaub ich zumindest so nicht. Kann ich ein Land (ist immer unregelmäßig) irgendwie einfärben?
Wenn das gehen würde, dann wäre mein Problem gelöst.

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
Das hab ich oben schon geschrieben (Gast).
Entweder du machst dir einen pixelbasierten Füllalgorithmus (wie FloodFilll) oder du benutzt die java API zum füllen von Polygonen. Die Polygone musst du dann halt selber bestimmen.

Beim eigenen FloodFill kannst du dann bei setPixel(x,y) machen : neuer pixel=mix(alterpixel,spielerfarbe);

Code:
final public static int mix(int a, int b)
{
return 0xFF000000|((a&0xfcfcfc)>>1)+((b&0xfcfcfc)>>1);
}

Damit der Füllalgorithmus mit Einfärben funktioniert, brauchst du halt 2 Maps, eine zum Füllen (in Landesfarbe 0,1,2), die andere für die Mischfarbe.

Keine Angst, geht auch einfacher: nimm einfach das Image des jeweiligen Landes, kopier es in ein neues und gehst mit mix(a,b) über die Pixel, dann setzen.
 
hi!

jetzt glaub ich weiß ich was du meinst. Du meinst wahrscheinlich ich soll ca. den Mittelpunkt eines Landes herausfinden und dann einfach die Farbe aller nebenstehenden Pixel ändern bis ich auf einen schwarzen Pixel stoße. Würde funktionieren. Weiß jemand, ob es eine Methode gibt, die die Farbe eines Pixels zurückliefert und kann man die Farbe eines einzelnen Pixels setzen?

Danke!!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
ok, bei der einfachsten Version (ohne Füllalgo, ist zu aufwändig) machst du folgendes:
1) komplette Karte im Malprogramm laden
2) bei 20 Ländern : 20 mal abspeichern (karte01.gif, Karte 02.gif,...)
3) Bilder nacheinander laden, dann alle Länder außer Land i wegradieren (nur noch ein Land im Bild, aber an der Origialposition), alle anderen Pixel sind schwarz


im Programm:
1) alle Bilder laden (macht ca. 40 mb bei 32 bit Farbtiefe und Kartengröße 1000*1000)


void zeigeKarte(){
for(int i=0;i<20;i++)setzeBild(i);
}

void setzeBild(int landIndex){
bild=getCopyof(bild[landindex]);

färbeBildEin(bild,farbeBesitzer);
bild.aufdenSchirm(); // transparent setzen (schwarze Pixel werden nicht gesetzt)
}


void färbeBildEin(Bild bild,int farbe){
int[] b=getIntsOf(bild);
for(int y=0;y<bild.h;y++)
for(int x=0;x<bild.w;x++){
int index=y*w+x:
int alt=b[index];
if(alt!=0xff000000) //das ist schwarz 0xffff=rot 0xff00ff=grün 0xff0000ff =blau (alpha+RGB)
bild[index]=mix(alt,farbe);
}}


das int[] bekommst du mit
DataBuffer db=((BufferedImage)image).getRaster().getDataBuffer();
DataBufferInt dbi=(DataBufferInt)db;
int[] b=dbi.getData();


das ganze geht auch einfacher mit der java image api. Aber Pixeloperationen sind geil,
 
hi!

so jetzt hab ich mal die vorgehensweise heraussen. Ich würde nur mehr hilfe bei ein paar programmiersprachen spezifischen fragen benötigen. Wie kann ich abfragen welche Farbe ein pixel hat? Ich habe eine JTextPane, in der ich ein ImageIcon hineingelegt habe (große Karte). Dann habe ich oben links noch eine kleine Karte -auch ImageIcon, aber ohne JTextPane (Übersichtskarte, wer welche Gebiete hat. Im ImageIcon will ich das jetzt so machen, dass ich jedem land eine farbe gebe und den bereich des landes mit dieser farbe ausfülle.

Dabei habe ich mir das folgendermaßen überlegt:
Wie in vorigen Antworten geschrieben, will ich für jede provinz einen mittelpunkt auswählen, an dem ich mich orientiere. Wenn jetzt ein land eingenommen wird, bestimme ich mir zuerst den mittelpunkt und von da ausgehend, mach ich alles in der bestimmten farbe, bis ich auf einen schwarzen pixel treffe. Dabei weiß ich jedoch nicht, wie ich das abfragen kann, ob ein Pixel schwarz ist. Malen dürfte glaube ich nicht so schwer sein. Dazu muss ich eigentlich nur für jedes pixel, dass sich in der eingenommenen provinz befindet ein drawLine(x,y,x,y) machen.

Müsste eigentlich so funktionieren oder?

Danke!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
also noch ein letztes mal:
Code:
int R=0xffff0000;
int G=0xff00ff00;
int B=0xff0000ff;
SCHWARZ=0xff000000;
int WEISS=0xffffffff;

z.B. int 
hellblau=mix(B,WEISS);

void setPixel(int[] i,int x,int y,int farbe){
i[y*image.width+x]=farbe;
}

int getPixel(int[] i,int x,int y){
return i[y*image.width+x];
}
an deiner Stelle würde ich erst mal mit farbigen Kreisen für die Länder anfangen. Du wirst nie mit dem Spiel fertig, wenn du schon bei der ersten Hürde lange hängen bleibst (nicht böse gemeint). Kümmer dich erstmal drum, dass das Spiel überhaupt ein wenig spielbar ist, danach kann man immer noch optisch aufpolieren. Dann bekommst du auch ein Gefühl dafür, welche Probleme noch auf dich zukommen (zB. Graphentheorie: Wege finden, welches Land ist erreichbar und wie weit entfernt usw etc). Wichtig ist, dass das Spiel überhaupt fertig wird (sieht nämlich bisher nicht so aus). Überspitzt gesagt: mach erstma eine Textversion, die FUNKTIONIERT.
Das mit den Kreisen ist ernst gemeint. Kannst ja den Radius der Landesgrösse anpassen, füllen mit Spielerfarbe und nochmal kleine Kreise rein für Burgen, Städte und so.
 
Danke!

Ich weiß deine Hilfe wirklich sehr zu schätzen! Das Spiel brauch ich übrigens für die Schule, ist eine Aufgabe, und da muss ich halt schauen, dass es gut wird.

Aber ich glaube, bis auf das, dass der Füllalgorithmus viel rechenzeit braucht, wird er ja nicht so schwer sein. Ich hab mir das folgendermaßen vorgestellt:

1) alle Pixel bestimmen, die eine Provinz belegt
-) solange kein schwarzes Pixel festgestellt wird, jedes pixel in ein feld speichern
2) for Schleife wo jedes Pixel auf eine bestimmte Farbe (die Farbe des Landes) gesetzt wird.

Das ist wirklich wichtig für mich. Wie gesagt, ich finde es total nett von dir, dass du mir schon soviele Beiträge geschrieben hast, aber ich würde, das was ich mir vorgenommen habe, auch gerne durchbringen. Wenn du z.B. auch zu diesem Thema (Füllalgorithmen, Karten zeichnen, ...) ein gutes Buch weißt würde ich es mir kaufen, weil es mich sehr interessiert.

Danke!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
danke für die Blumen!
nach 3 Sekunden googlen: http://www.cs.rit.edu/~swm/cs2/4/FloodFill.java (sehr billig und langsam, reicht aber, habs nicht ausprobiert)
Damit musst du auch keine Pixel für jedes Land merken.
Dann machs halt doch so, wie ichs ganz am Anfang vorgeschlagen hab:
Karte malen, einmal schön mit Schattierungen, Wald, Berge, blabala und einmal nur die Grenzen in schwarz.
Dann lässt du im Programm den Floodfill über die Pixel mit der Grenzkarte laufen, färbst bei jedem Pixel parallel die "schöne" Karte nach Besitzerfarbe. (Dabei wird die Grenzkarte nicht angezeigt)
Einen Punkt pro Land der Grenzkarte aufschreiben (z.B. 100,130), an dem Floodfill startet.
Bei dem FloodfillCode wird ein int[][] genutzt, wie man ein int[] vom Image bekommt, weisst du ja.
int[][] convert(int[] i){
int[][] a=new int[width][height];
for(int y=0;y<height;y++)
for(int x=0;x<width;x++)
a[x][y]=i[y*width+x];
return a;
}
müsste gehen...

Landschaften kann man supi mit PerlinNoise generieren. Kauf keine Bücher, Google hat es.
 
Sorry, dass ich nochmal was fragen muss, aber ich bekomm da immer eine NullPointerException.

Eigentlich weiß ich ja wie ich das Feld mit den Farben bekomme:
Code:
        bi = (BufferedImage)lLittleImage.createImage(lLittleImage.getWidth(),lLittleImage.getHeight());
        
        int []x = new int[bi.getWidth()*bi.getHeight()];
        bi.getRGB(0,0,bi.getWidth(),bi.getWidth(),x,0,1);
        
        for(int i=0;i<x.length;i++) {
            System.out.println(x[i]);

Aber hier bekomm ich schon in der 1. (!) Zeile eine NullPointerException. Woran kann das liegen? Eigentlich müsste man mit createImage ein Image zurückbekommen, dass dann auf BufferedImage gecastet wird und sich dann problemlos in ein BufferedImage speichern lassen sollte (oder?).

Danke!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
bi = (BufferedImage)lLittleImage.createImage(lLittleImage.getWidth(),lLittleImage.getHeight());
ist lLittleImage ne Klasse? ewa ein Object? ???:L
mach dir ne WrapperKlasse für Images (namens Screen) und simsalabim werden alle Problem weg sein.

Code:
class Screen(){
public int w,h;
public int[] m;
public BuferedImage image;
public Screen(int w,int h){
this.w=w;
this.h=h;
image =new BufferedImage(w, h,BufferedImage.TYPE_INT_RGB);
DataBuffer db=image.getRaster().getDataBuffer();
DataBufferInt dbi=(DataBufferInt)db; 
m=dbi.getData();

public void setPixel(x,y,int c){m[y*w+x]=c;}
public int getPixel(x,y)...
}
}

public static int[] getPixels(Image im, int width, int height)
{
int i[]=new int [width*height];
PixelGrabber pg= new PixelGrabber(im,0,0,width,height,i,0,width);
try{pg.grabPixels();}catch (InterruptedException e){}
return i;
}


laden mit ImageIO.read(file), dann convertieren mit:
public static Screen fromImage(BufferedImage im)
  {
  int w,h;
  w=im.getWidth();
  h=im.getHeight();
 
  Screen s=new Screen(w,h);
int[] m=m = getPixels (im,w,h);
System.arraycopy(m,0,s.m,0,w*h);

  return s;
}

edit: im fromImage() hab ich einen Fehler korrigiert, sind vielleicht noch mehr drin.
maps: http://www.profantasy.com/
 
hallo!

Na ja ein erster Erfolg ist geschafft! Ich habe die Provinz Navarra in Spanien gelb gefärbt!!! Das einzige Problem ist, dass es ca. 10 min. dauerte. Könntest du vl. schauen ob ich einen fehler in meinem Algorithmus habe, oder ist es normal, dass das so lange dauert?

Code:
/*
 * NewGame.java
 *
 * Created on 11. April 2005, 12:23
 */

/**
 *
 * @author  dv20010517
 */
package War;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.image.*;

public class NewGame extends JDialog{
    
    private JButton bOK = new JButton("Ok"); // auf OK um Spiel zu starten
    private JButton bCancel = new JButton("Abbrechen"); // abbrechen kein neues spiel
    private JList lLaender = new JList(); // liste mit ländern
    private String []laenderString = {"Das Heilige Römische Reich","Frankreich","England","Russland","Italien"} ;
    private War father; // der Vater, der den Sohn Dialog aufruft
    private MyJTextPane jtp = new MyJTextPane(); // eine modifizierte JTextPane mit ca. den gleichen funktionen
    private ImageIcon bigImage = new ImageIcon(); // große Karte
    private ImageIcon littleImage = new ImageIcon(); // kleine Karte oben links
    private JTabbedPane tp = new JTabbedPane(); // tabbed pane für gebäude und soldaten
    private JButton bQuitRound= new JButton("Runde beenden"); // runde beenden neues jahr beginnen

    
    /** Creates a new instance of NewGame */
    public NewGame(War father) {
        this.father =father;
        lLaender.setListData(laenderString);
        bOK.addActionListener(new ActionListener() { // wenn neues spiel gestartet werden soll
            public void actionPerformed(ActionEvent e){
                createNewGame();
            }
        });
        bCancel.addActionListener(new ActionListener() { // wenn kein neues spiel gestartet werden soll
            public void actionPerformed(ActionEvent e) {
                dispose();
            }
        });
        customizeLayout();
    }
    
    public void customizeLayout() { // layout festlegen
        JPanel p = new JPanel(new FlowLayout());
        JPanel pButtons = new JPanel(new GridLayout(2,1));
        p.add(new JLabel("Wählen Sie ein Land aus"));
        p.add(lLaender);
        pButtons.add(bOK);
        pButtons.add(bCancel);
        p.add(pButtons);
        this.getContentPane().add(p);
        setResizable(false);
        setModal(true);
        father.setTitle((String)lLaender.getSelectedValue());
        pack();
    } 
    public void createNewGame() {
        if(!lLaender.isSelectionEmpty()) {
            father.getContentPane().add(new JScrollPane(jtp,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS),BorderLayout.CENTER);
            bigImage = new ImageIcon(Toolkit.getDefaultToolkit().getImage("C:\\Dokumente und Einstellungen\\Christian\\WarAndDiplomacy\\src\\War\\Europe.jpg").getScaledInstance(1824, 1633, Image.SCALE_SMOOTH));
            littleImage = new ImageIcon(Toolkit.getDefaultToolkit().getImage("C:\\Dokumente und Einstellungen\\Christian\\WarAndDiplomacy\\src\\War\\Europe.jpg").getScaledInstance(324, 133, Image.SCALE_SMOOTH));
            int [][]a= getArray(littleImage.getImage(),littleImage.getIconWidth(),littleImage.getIconHeight());
            int []newA;
            newA=convert(fill2(22,80,Color.YELLOW.getRGB(),a));
            MemoryImageSource mis = new MemoryImageSource(littleImage.getIconWidth(),littleImage.getIconHeight(),newA,0,littleImage.getIconWidth());
            littleImage = new ImageIcon(Toolkit.getDefaultToolkit().createImage(mis));
            jtp.insertIcon(bigImage);
            jtp.setEnabled(false);
            JPanel pNorth = new JPanel(new GridLayout(1,2));
            JPanel pBuildingTab = new JPanel(new FlowLayout());
            JPanel pArmyTab = new JPanel(new FlowLayout());
            tp.addTab("Gebäude",pBuildingTab);
            tp.addTab("Einheiten",pArmyTab);
            WarLabel lLittleImage = new WarLabel(littleImage);
            pNorth.add(lLittleImage);
            pNorth.add(tp);
            pNorth.add(bQuitRound); 
            JPanel pFloat = new JPanel(new FlowLayout());
            pFloat.add(pNorth);
            father.getContentPane().add(pFloat,BorderLayout.NORTH);
            father.getContentPane().repaint();
            dispose();
        }
        else
            JOptionPane.showMessageDialog(this,"Sie haben kein Land ausgewählt. Sie müssen eines\nauswählen um ein neues Spiel starten zu können.\nWenn sie kein neues Spiel starten wollen, klicken\nsie auf abbrechen.","Kein Land gewählt",JOptionPane.OK_OPTION);
    }
    
    private int[] convert(int[][] a) {
        int j=0;
        int []newA = new int[a.length*a[0].length];
        for(int i=0;i<a.length*a[0].length;i++) {
            if(i%a.length==0&&i!=0)
                j++;
            newA[i] = a[i-j*a.length][j];
        }
        for(int i=0;i<newA.length;i++)
            System.out.print(newA[i]+" ");
        return newA;
    }
    
    private int[][] fill2(int x, int y,int color, int [][]a) {
        System.out.println(a[x][y]);
        if(a[x][y]==-1) {
            System.out.println("CL UMGESTELLT");
            a[x][y] = color;
            a=fill2(x,y+1,color,a);
            a=fill2(x,y-1,color,a);
            a=fill2(x+1,y,color,a);
            a=fill2(x-1,y,color,a);
        }
        for(int i=0;i<a[0].length;i++)
            for(int j=0;j<a.length;j++)
                System.out.print(a[j][i]+" ");
        System.out.println();
        return a;
    }
    
    private int[][] getArray(Image img, int width,int height) {
        
        int []array=new int[littleImage.getIconWidth()*littleImage.getIconHeight()];
        PixelGrabber grab = new PixelGrabber(img,0,0,width,height,array,0,width);
        try {
            grab.grabPixels();
        }
        catch(InterruptedException e) {}
        int[][] a=new int[width][height]; 
        for(int y=0;y<height;y++) 
            for(int x=0;x<width;x++) 
                a[x][y]=array[y*width+x];
        return a;
    }
}

Wenn du vl. einen Fehler im algo siehst, dann sag mir bitte bescheid. Sonst werde ich es so lassen. Ich glaube nicht, dass ich einen besseren algorithmus für das füllen verstehen würde ???:L

Besten Dank!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
wenn du überall die System.out.println wegmachst, dürfte es ungefähr 1000 mal schneller sein. Oder 20000 mal.
So einfach kann das sein :)
 
Ja, stimmt danke. Jetzt geht es schneller. War nur zum kontrollieren. Das dürfte jetzt mal funktionieren, jetzt muss ich halt schauen wie ich einen algorithmus entwickle mit dem ich den mittelpunkt eines landes herausfinde, um dieses zu identifizieren. Weißt du wie man so einen algorithmus nennt und vl. eine Internetseite zum nachlesen?

Danke!

mfg,
christian.

P.S.: Danke für den link mit den Maps, ist voll super und bezüglich der Schnelligkeite hattest du auch recht. Geht jetzt ca. 20000 mal oder noch mehr schneller.
 

Hansdampf

Bekanntes Mitglied
alle Mittelpunkte bekommst du so: färbe jedes Land mit einer Farbe 0 bis n (also die Zahlen 0,1,2,3,4,5,6),
dann über das ganze Bild
int[] countx=new int[n];
int[] county=new int[n];
int[] count=new int[n];
for y
for x
{
int index=map.getPixel(x,y);
countx[index]+=x;
county[index]+=y;
count[index]++;
}

for i to n
countx/=count;
county/=count;
System.out.println(""+countx+" "+county);

fertsch. in count hast du dann praktischerweise die Landesgrösse in Pixel (vielleicht für Bevölkerungszahl oder so)
 
hallo!

Wie soll das mit dem einfärben der länder funktionieren? Das verstehe ich leider noch nicht ganz, da ich ja den mittelpunkt brauche um mein floodfill anwenden zu können.

Die zweite frage wäre bezüglich des algorithmus: Was sind die variablen countx und county? Warum machst du ein getPixel? Das liefert ja einen Farbwert. Was ist wenn der Wert z.B. -43....... ist. Den Index kann man dann nicht ansprechen (meine Grenzen haben diesen wert.

Die Fragen wären noch offen ???:L

Danke!!!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
Achso, im Malprogramm kannst du vielleich keine Farbe 0 einstellen sonder nur 0xff000000.
Also in der Schleife:
int col=getPixel(x,y);
col-=0xff000000;
if(col!=Grenzfarbe) //falls das schwarz ist, also 0xff000000 dann mal im Malprogramm mit 1bis n statt 0 bis n malen.
{
col--;
..
..
..
}

countx und y addiert die gesamten Koordinaten der Pixel eines Landes. Teilt man das durch die Anzahl der Pixel, bekommt man den Mittelpunkt.

Eine viel elegantere Möglichkeit, bei der du die Länder in beliebigen Farben malen kannst:


int[] farben=new int[anzahllaenderOderMehr]
int index=0;

boolean farbeSchonDrin(int col){
for(int i=0;i<index;i++)if(farben==col)return true;
farben[index]=col;
index++;
return false;
}


for y
for x
{
int c=getPixel(x,y);
if(c!=grenzfarbe);
if(!farbeSchonDrin(c))System.out.prinln("neue Farbe gefunden "+c);
}

for i to index System.out.prinln(" Farbe +"i+farben);

Dann kannst du in der Mittelpunktschleife die Farbe auf einen index "mappen":
in farbe2index(int col){
for(int i=0;i<index;i++)if(farben==col)return i;
System.out.prinln("shit :farbe nicht gefunden");
return 0;
}

edit :schreib dir
public void p(String s){
//System.out.println(getClass.getName()+":"+s);
}

spart Zeit und Nerven. Bei Testmodus halt auskommentieren
 
Hi! Ich wollte nur noch einmal nachfragen und sehen, ob ich deinen code verstanden habe:


int[] farben=new int[anzahllaenderOderMehr] // ok das ist klar. einfach ein feld wo alle farben reinkommen
int index=0; // der index, wird glaub ich am ende die anzahl der länder sein oder??

boolean farbeSchonDrin(int col){ // wann verwende ich diese methode?
for(int i=0;i<index;i++)if(farben==col)return true;
farben[index]=col;
index++;
return false;
}


for y
for x
{
int c=getPixel(x,y); // ist damit die farbe des pixels gemeint?
if(c!=grenzfarbe);
if(!farbeSchonDrin(c))System.out.prinln("neue Farbe gefunden "+c); // bringt das was?
}

for i to index System.out.prinln(" Farbe +"i+farben); // wieso das? ist das nicht overhead?

Dann kannst du in der Mittelpunktschleife die Farbe auf einen index "mappen": // mappen?
in farbe2index(int col){
for(int i=0;i<index;i++)if(farben==col)return i; // dadurch bekomme ich aber nicht den mittelpunkt
System.out.prinln("shit :farbe nicht gefunden");
return 0;
}

edit :schreib dir
public void p(String s){ // keine Ahnung was diese methode macht
//System.out.println(getClass.getName()+":"+s);
}

Könntest du mir vl. noch meine Fragen beantworten, weil den mittelpunkt zu finden doch eine sehr wichtige sache für mein spiel ist.

Vielen Dank!

mfg,
christian.
 

Hansdampf

Bekanntes Mitglied
1)ja
2)wird inner Schleife 13 Zeilen drunter benutzt
3)ruft die Methode 13 Zeilen drüber auf und erhöht den index, schreibt die neue Farbe rein
4)übersichtshalber. ja.
5)mappen: von einem Wertebereich in einen anderen transformieren. ZB Farbe->Zahl. Hier mit Hilfe einer Tabelle int[]
6) stimmt. Aber den index der Farbe!

dann zum Mittelpunkte ausrechen:
for x
for y
{
c=getPixel(x,y); //Farbe
if(c==grenzfarbe || c==hintergrundfarbe)continue; //das muss eigentlich auch noch beim Farbenzählen rein.
int index=col2index(c); //index
count[index]++;
.
.
}

das int[] mit den Farbwerten kannst du danach wegschmeissen, wird nur zum Mittelpunktausrechen und Farbenzählen (=Länderanzahl) gebraucht.

damit rechnest du genau gesagt den Schwerpunkt eines Landes aus.
Wenn du den Anfangs- und Endpunkt einer Linie addierst und durch 2 teilst, bekommst du die Mitte.
Hier addierst du alle Koordianten und teilst durch die Anzahl der Koordinaten.
 
Ok, ich hab mir das ganze mit dem Mittelpunkt noch einmal überlegt.

Ich glaube am praktischsten wäre es einen MouseListener zu programmieren und dann die koordinaten auszugeben und für jedes land hart einzutragen. Dann hab ich auch gleich immer den Namen der Provinz und kann in dann am bildschirm ausgeben. Das wäre dann auch noch ganz praktisch in einer Map (vl. HashMap) anzulegen.

Das einzige Problem könnte auftreten: Ich richte mein Spiel immer nach der Auflösung des Bildschirms, aber da ich meine Map in ein FlowLayout stecke, glaub ich kann da nicht viel passieren, oder??

Ich meine halt dass dies eine einfache, performante und zielstrebige Lösung ist. Nur ob es so funktioniert ist eine andere sache :)

Danke!

mfg,
christian.
 
G

Guest

Gast
Hallo,

ich suche jemanden, der mir nach Vorgaben ein J2ME-Programm für mein Händy schreibt. Wäre gerne dabei um zu sehen wie es in etwa funktioniert und wie das Programm auf mein Handy kommt.

Am besten kommt derjenige aus der Nähe von Köln und kann dann zu mir in die Firma kommen. Oder er kommt aus dem Raum Aachen und kann zu mir nach Hause kommen. Das ganze natürlich nicht umsonst. Den Spaß würde ich mir schon EUR 10,-/Std. kosten lassen.

Bei Interesse bitte Mail an world-on-the-web@web.de

Beste Grüße an Alle
Mario Pfeiffer
 
hallo!

nun will ich die armeen pro land aufstellen. Ich hab jetzt einen code geschrieben:

Code:
    public void setArmies(HashMap provinces, HashMap countryColor) {
        Iterator it = provinces.values().iterator();
        int i=0;
        for(;it.hasNext();i++) it.next();
        p = new Point[i+1];
        c = new Color[i+1];
        it = provinces.values().iterator();
        for(i=0;it.hasNext();i++) {
                ProvinceState ps = (ProvinceState)it.next();
                if(ps.isVisible()) {
                    p[i] = new Point(ps.getPoints()[0].x*8,ps.getPoints()[0].y*8);
                    c[i] = (Color)countryColor.get(ps.getCountry());
                }                
        }
        repaint();
    }
    public void paint(Graphics g) {
        super.paint(g);
        if(c!=null)
            for(int i=0;i<c.length&&i<p.length;i++) {
                try {
                g.setColor(c[i]);
                }catch(NullPointerException e) { System.out.println("Color "+c[i]);}
                try {
                g.fillOval(p[i].x,p[i].y, 10,10);
                }catch(NullPointerException e) { System.out.println(i+" "+p.length);}
            }
    }

Das Problem dabei ist, wenn ich auf das Image einen Kreis zeichne und dann die Farbe eines Pixels innerhalb des Kreises haben will, dann bekomm ich die Farbe des Bildes und nicht des Kreises. Ich weiß es müsste eine Möglichkeit geben von einer Component ein Bild zu bekommen und so irgendwie dann die Farbe des Kreises ermitteln zu können, aber wenn ich die Farbe habe, weiß ich trotzdem nicht in welchem Land die Armee steht (das müsste ich wahrscheinlich zusätzlich in irgendwie abspeichern, vl. mit einem Objekt (innere Klasse)??).

Hat jemand eine Idee, wie man das am besten hinbekommen könnte? Mir sind da leider mittlerweile schon die Ideen ausgegangen.

Danke!!

mfg,
Christian.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
0 Vorgehensweise Aufbau/Strategie Spiel Spiele- und Multimedia-Programmierung 14
hdi Suche Partner für Hobby-Projekt: 2D-Strategie-Spiel Spiele- und Multimedia-Programmierung 86
V Ist LibGDX bei der aktuellen Oracle-Strategie noch die richtige Wahl? Spiele- und Multimedia-Programmierung 9
A [Strategie] 8 - Version Cosmos Spiele- und Multimedia-Programmierung 2
J java netzwerk strategie game programmiert Spiele- und Multimedia-Programmierung 4
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
E Spiel neustarten Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben