# Spielvorstellung: Kniffel



## Private Void (22. Apr 2010)

Hallo zusammen!

Ich hab mal ein kleines Kniffel-Spiel programmiert. Bitte postet mal, was ihr davon haltet.


----------



## Sonecc (22. Apr 2010)

Um sich den SourceCode anzuschauen, müsste dieser erstmal vorhanden sein


----------



## ARadauer (22. Apr 2010)

Kniffel$1.class bis Kniffel$16.class und Kniffel.class.. kann es sein das du alles in eine Klasse geschmissen hast?


----------



## Private Void (22. Apr 2010)

Sonecc hat gesagt.:


> Um sich den SourceCode anzuschauen, müsste dieser erstmal vorhanden sein



Ok, ich hätt vielleicht dazu sagen sollen, dass es sich aufs Ergebnis bezog.



ARadauer hat gesagt.:


> Kniffel$1.class bis Kniffel$16.class und Kniffel.class.. kann es sein das du alles in eine Klasse geschmissen hast?



Um ehrlich zu sein wusste ich hier in diesem Fall nicht so recht, was ich alles in eine zweite, dritte ... Klasse hätte auslagern sollen.
Die Erstellung der Zufallszahlen ist ein Dreizeiler mit einer for-Schleife drum rum (wenn das schon für eine eigene Klasse ausreicht, ändere ich das natürlich ab) und alles andere bezieht sich auf die Benutzerberfläche, die ich zumindest in diesem hier vorliegenden Fall meine, in einer einzelnen Klasse abhandeln zu können, weil sie wie ich finde noch nicht allzu umfangreich und vielschichtig ist.


----------



## Gonzo17 (22. Apr 2010)

Die Oberfläche gefällt mir garnicht. Die Radio-Buttons sollten besser Checkboxen sein. Die Buttons rechts sollte man schöner anordenen. Und es wäre von Vorteil, wenn du dem User irgendeinen Anhaltspunkt gibst, wie das Programm funktionieren soll (zB durch Tooltips). Wenn man nicht genau weiss was bei Kniffel zu tun ist, dann ist man irgendwie auf verlorenem Posten. Und irgendwie passiert auch nichts, wenn man am Ende ist, da gehts dann einfach nich weiter. ???:L


----------



## Marco13 (22. Apr 2010)

Naja... Je nachdem, mit welchem Kenntnisstand das entwickelt wurde... Hm.

Ein konsistentes Layout wäre nicht verkehrt. Die Buttons könnte man vielleicht lieber disablen statt verschwinden lassen - oder allgemein: Nur enablen, was man auch anklicken kann (so kann man einfach alles anklicken, und dann ist das Bild leer...). Ein bißchen Hirnschmalz wäre ja vielleicht nötig, wenn man überprüfen würde, was man "sinnvoll" anklicken kann, also wenn man z.B. 4,5,6,3,6 gewürfelt hat einen Roten Rahmen (oder so) um "3er","4er","5er","6er" und "Kleine Straße" anzuzeigen. Von sowas wie einem Mehrspielermodus mal abgesehen....


----------



## Private Void (22. Apr 2010)

Also in Sachen Kenntnisstand kann ich sagen: ich hab vor einem halben Jahr angefangen, mich überhaupt mit Software-Programmierung zu befassen - und selbst das mit mehreren kleineren Pausen.

Natürlich ist das, was ich da fabriziert habe, nicht gerade ein Meisterwerk. Je mehr Input ihr mir verabreicht, bezüglich dessen, was sich alles noch auf welche Weise verbessern lässt, desto besser.

Gonzo17 hat ja schonmal vorgeschlagen, statt RadioButtons CheckBoxen zu verwenden.
Disablen statt setVisible(false).

Welches Layout könnte ich denn anstelle vom verwendeten GridBagLayout nehmen?

Ich merke schon: bisher ist mein Programm noch nicht gut angekommen.
Aber ich sag mal so: mit jeder Kritik wird es eher besser als schlechter (was wahrscheinlich nach dem momentanen Stand der Dinge noch nicht allzu schwierig sein dürfte :lol


----------



## Tomate_Salat (22. Apr 2010)

Zur Oberfläche: Man bräuchte eine Tabelle, in der man seine Punkte sehen kann. Ich sehe zwar meine Gesamtpunkte, aber nicht was ich wirklich gesetzt habe.


----------



## Marco13 (23. Apr 2010)

Hm. Welches Layout...? Diejenigen, die sich Kniffel ausgedacht haben, haben sich vermutlich auch überlegt, wie man das Layout des Spielzettels "gut" machen könnte :meld: 

Es ist ja nichts "falsch" an dem Programm an sich, und es funktioniert ja auch und so, aber abgesehen davon, dass andere die Messlatte schon recht hoch gelegt haben kann man ein Programm, von dem man nur die Oberfläche sieht, auch nur nach dieser beurteilen. Vielleicht ist dein Programm intern supertoll strukturiert und so, aber im positiven wie im negativen Sinne ist es eben meistens so: "Das Programm" ist für die meisten nicht der Quellcode, sondern das, was man auf dem Bildschirm sieht....


----------



## Gonzo17 (23. Apr 2010)

Private Void hat gesagt.:


> Ich merke schon: bisher ist mein Programm noch nicht gut angekommen.
> Aber ich sag mal so: mit jeder Kritik wird es eher besser als schlechter (was wahrscheinlich nach dem momentanen Stand der Dinge noch nicht allzu schwierig sein dürfte :lol



Das ist aber auch keinesfalls böse gemeint.  Es ist ja nicht so, dass das Programm grottenschlecht ist, vor allem nicht, wenn du eben Anfänger bist, aber der erste Eindruck ist eben nicht sehr ansprechend. Von der Funktionalität her tuts ja schonmal fast genau das, was man erwartet, das ist auch was wert! Wie gesagt, lediglich das Ende sollte noch irgendwie "verarbeitet" werden, sonst weiss man ja auch nicht, dass da überhaupt ein Ende ist.


----------



## Quaxli (23. Apr 2010)

Für ein halbes Jahr programmieren imho ja schonmal nicht schlecht. Da haben wir hier schon Schlechteres gesehen.  Heb' Dir das mal gut auf und schau es Dir in einem Jahr nochmal an. Da kannst Du dann die Hände über dem Kopf zusammenschlagen und Dich wundern, was Du damals fabriziert hast  
Zum Thema Layout haben ja die Vorredner schon einiges gesagt. Was mir noch aufgefallen ist: Man kann, nachdem der letzte Button verschwunden ist, nochmal würfeln. Das solltest Du auf jeden Fall noch abstellen.
Was ein nettes Feature wäre, allerdings auch etwas aufwändiger: Wenn man angezeigt bekäme, was mit dem momentanen Würfelergebnis realisierbar wäre.


----------



## Private Void (23. Apr 2010)

Ist schon in Ordnung so, Gonzo  - ich bin keineswegs beleidigt oder sowas.

Sicherlich wäre JTable eine mögliche Lösung für die Anzeige der einzelnen erzielten Wertungen. Ich hab aber noch nie damit rumgewerkelt - weiß also noch überhaupt nicht, wie das funktioniert. Muss ich mich also mal im Forum umsehen und API aufsuchen.
Mithilfe einer Textabrage, ob für bestimmte Wertungen schon eine Punktzahl in der Tabelle existiert, kann ich ja dann die JButtons mittels if-Bedingung disablen, anstatt sie unsichtbar zu machen.

Wir können ja mal eine kleine ToDo-Liste erstellen:
- Checkbox statt RadioButton
- Würfel als Images darstellen und nicht mehr als Zahlen (muss ich auch noch rausfinden, wie das geht)
- Das Markieren der JButtons, deren Wertungen zur Zeit möglich wären (durch Border?)
- in die Menü-Leiste das JMenuItem 'Spielanleitung' (mit entsprechender Funktion) einfügen [evtl. in ein JMenu 'Hilfe']
- JTable?
Hab ich was vergessen?

Kann man fürs JFrame definieren, dass man die Größe des Fensters nicht ändern kann, also die Voreinstellung vom Programm fest beibehalten wird?

Dass das Spiel zuende ist, könnte ich vielleicht dadurch verdeutlichen, dass erst dann, wenn alle Wertungen in der Tabelle eingetragen sind, die Gesamtpunktzahl ausgerechnet und angezeigt wird.

Einen Mehrspieler-Modus könnte ich ja mittels CardLayout realisieren, indem nach jedem Eintrag der/die/das Card automatisch gewechselt wird. Auf jeden der Cards müsste dann natürlich auch "Spieler 1", "Spieler 2", etc. stehen. Am Ende müssen dann alle Ergebnisse nach Höhe sortiert in einer Rangliste dargestellt werden.


----------



## MiDniGG (23. Apr 2010)

Private Void hat gesagt.:


> Kann man fürs JFrame definieren, dass man die Größe des Fensters nicht ändern kann, also die Voreinstellung vom Programm fest beibehalten wird?



Ja. Ich glaube es hieß setResizable(false);  Aber bin nicht 100% sicher :-D

*Edit:* Ich hatte Recht!  Frame (Java 2 Platform SE 5.0)



Private Void hat gesagt.:


> Dass das Spiel zuende ist, könnte ich vielleicht dadurch verdeutlichen, dass erst dann, wenn alle Wertungen in der Tabelle eingetragen sind, die Gesamtpunktzahl ausgerechnet und angezeigt wird.



Ich würde es so machen, dass am Ende einfach alle Buttons disabled sind, außer einem "Neues Spiel" Button. 



Private Void hat gesagt.:


> Einen Mehrspieler-Modus könnte ich ja mittels CardLayout realisieren, indem nach jedem Eintrag der/die/das Card automatisch gewechselt wird. Auf jeden der Cards müsste dann natürlich auch "Spieler 1", "Spieler 2", etc. stehen. Am Ende müssen dann alle Ergebnisse nach Höhe sortiert in einer Rangliste dargestellt werden.



Das klingt gut.  Mach das


----------



## Juwi97 (23. Apr 2010)

Marco13 hat gesagt.:


> Naja... Je nachdem, mit welchem Kenntnisstand das entwickelt wurde... Hm.
> 
> Ein konsistentes Layout wäre nicht verkehrt. Die Buttons könnte man vielleicht lieber disablen statt verschwinden lassen - oder allgemein: Nur enablen, was man auch anklicken kann (so kann man einfach alles anklicken, und dann ist das Bild leer...). Ein bißchen Hirnschmalz wäre ja vielleicht nötig, wenn man überprüfen würde, was man "sinnvoll" anklicken kann, also wenn man z.B. 4,5,6,3,6 gewürfelt hat einen Roten Rahmen (oder so) um "3er","4er","5er","6er" und "Kleine Straße" anzuzeigen. Von sowas wie einem Mehrspielermodus mal abgesehen....



Nur enablen was man auch anklicken kann... 


Hört sich gut an, wie wäre es mit einer Version mit verschiedenen Schwierigkeitsgraden?


----------



## Private Void (23. Apr 2010)

Juwi97 hat gesagt.:


> Nur enablen was man auch anklicken kann...



Gegen Ende des Spiels kann es passieren, dass selbst nach dem dritten Wurf keine der verbleibenden Wertungen erfüllt werden kann und eine mit 0 Punkten gestrichen werden muss. Das muss man eben dann berücksichtigen, dass man nach dem dritten Wurf sich zum Wegstreichen frei für eine entscheiden kann, sollte keine der Bedingungen erfüllt werden können


----------



## Marco13 (24. Apr 2010)

Man könnte darüber jetzt philosophieren, aber theoretisch kann man ja auch einen Kniffel werfen, und dann entscheiden "Och, ich streiche jetzt mal meine große Straße :autsch: ". Aber im Moment kann man ja praktisch von anfang an ohne zu werfen ALLES streichen.... das ist IMHO nicht so schön...


----------



## ren92 (11. Mai 2010)

Hey Praivate Void!

könntest du vll mal deinen quellcode hier rein stellen? weil ich bin zur zeit auch an einem Kniffel Projekt dran! mir fehlt allerdings die große und kleine Straße! ich komme da nicht ganz hinter, wie ich das am besten programmiere!
danke


----------



## ARadauer (11. Mai 2010)

so zb...


```
import java.util.Arrays;


public class Test{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		int [] numbers = {1,2,3,4,6};
		System.out.println(isBigStreet(numbers));
		System.out.println(isSmallStreet(numbers));
			
	}
	
	public static boolean isBigStreet(int[] numbers){
		return lengthOfStreet(numbers) == 5;		
	}
	public static boolean isSmallStreet(int[] numbers){
		return lengthOfStreet(numbers) == 4;		
	}
	
	public static int lengthOfStreet(int[] numbers){
		Arrays.sort(numbers); //mal sortieren, falls noch nicht gemacht
		int maxLengthOfStreet = 0; //die maximale länge der straße
		int tempLengthOfStreet =1; //temporäre Zähler Variable
		for(int i =0; i<numbers.length-1; i++){ //von der ersten bis zur vorletzen
			if(numbers[i]+1!=numbers[i+1]){ //aktuelle nicht um eins kleiner als die nächste, dann ist die folge zu ende
				if(maxLengthOfStreet < tempLengthOfStreet) //maximum kleiner als temp
					maxLengthOfStreet = tempLengthOfStreet; // dann ist temp das neue maximum
				tempLengthOfStreet = 1; // und wir fangen neu an
			}else{
				tempLengthOfStreet++; //passt es erhöhen wir einfach den zähler
			}
		}
		if(maxLengthOfStreet< tempLengthOfStreet) // die aktuelle folge, größer als das maximum?
			maxLengthOfStreet = tempLengthOfStreet; //temp ist das neue maximum
		return maxLengthOfStreet;
	}
	

}
```

ohne gewähr.. has nicht sehr ausführlich getestet...


----------



## Private Void (11. Mai 2010)

Ich bin über den Code jetzt nur mal so drübergeflogen, aber hast du bei der kleinen Straße berücksichtigt, dass mittendrin eine Zahl doppelt vorkommen kann?
z.B. bei 2 3 4 4 5 , oder 1 2 2 3 4.

Bei der großen Straße hab ich einfach den Ausdruck *'numbers[0]+1 == numbers[1] && numbers[0]+2 == numbers[2] && numbers[0]+3 == numbers[3] && numbers[0]+4 == numbers[4]'* als Bedingung für einen if-Block verwendet.

Natürlich muss die Zahlenreihe sortiert sein.

Für die kleine Straße hab ich die Liste bzw. das Array mit den Würfelzahlen durchsucht, ob eine Zahl doppelt vorkommt, eine der beiden Zahlen dann durch die Zahl 10 ersetzt , denn die kommt nicht als "Einzelwürfelergebins" vor und ist weit genug von der 6 als höchstmögliche Zahl weg, damit aus einer kleinen Straße nicht plötzlich eine große wird. Dann muss diese 10 an die letzte Stelle in der Liste / im Array verschoben werden.
Für die Bedingung im if-Block kannst du dann einfach den Ausdruck für die große Straße hernehmen und den letzten '=='-Vergleich einfach weglassen.


Konnte ich dir damit weiterhelfen?


----------



## ren92 (11. Mai 2010)

Hey danke für eure schnellen Antworten!
echt top von euch!

Wenn ich deine If - Bedingung im Kopf durchgehe, erscheint sie mir auch logisch, aber wenn ich sie dann in mein programm einbaue hängt sich das kniffel programm auf.
Ich habe die Arrays auch mit merge() sortiert! Also dass die Inhalte aufsteigend sortiert sind!!!
Er hängt sich wie gesat auf! Habt Ihr ne Lösung?


```
public void mouseEntered(java.awt.event.MouseEvent e) {  
					int summeNeu = 0;
					if (merge() == true && geklickt == false) {
						if (wuerfel[0]+1 == wuerfel[1] && wuerfel[0]+2 == wuerfel[2] && wuerfel[0]+3 == wuerfel[3] && wuerfel[0]+4 == wuerfel[4]){
						
						summeNeu = 40;
						}
						
				}taLgStraight.setText(String.valueOf(summeNeu));
			}
```


----------



## tuttle64 (11. Mai 2010)

Hallo, das Spiel finde ich ganz gut gelungen, was den Spielspass anbelangt. Vielleicht ist das Aussehen noch nicht ganz gelungen. Hier mal eine Idee, wie Kniffel aussehen könnte. Statt MenuBar nur zwei Buttons, statt die Buttons verschwinden zu lassen die Zeile in der Tabelle grau hinterlegen, eine Top 10 Liste wäre auch ganze nett usw.


----------



## ren92 (21. Mai 2010)

also jungs, 
ich habs problem gelöst...es läuft einigermaßen! 


```
http://rapidshare.com/files/390050071/kniffel4.jar
```


----------



## LP_SE (27. Mai 2010)

@Juwi:


> Hört sich gut an, wie wäre es mit einer Version mit verschiedenen Schwierigkeitsgraden?


Was solls den bei Kniffel für Schwierigkeitsgrade geben ? Die große (5er-) Straße nur mit 3 Würfeln zu schaffen oder wie?


----------



## MiDniGG (27. Mai 2010)

LP_SE hat gesagt.:


> Was solls den bei Kniffel für Schwierigkeitsgrade geben ? Die große (5er-) Straße nur mit 3 Würfeln zu schaffen oder wie?



Mann könnte Computergegner so einstellen, dass sie ziemlich dumme Sachen aufschreiben lassen... Das wäre die einzige Schwierigkeitsgradeinstellung (geiles Wort) das mir einfallen würde. :-D


----------



## Private Void (28. Mai 2010)

Hier eine nochmal überarbeitete Version von mir (es werden noch Verschönerungen/Ergänzungen/Verbesserungen hinzukommen => Feedback erwünscht!)

Da ich es unter Linux programmiert habe, weiß ich nicht so genau, wie es unter Windows oder Mac aussieht.


----------



## eRaaaa (28. Mai 2010)

Private Void hat gesagt.:


> Da ich es unter Linux programmiert habe, weiß ich nicht so genau, wie es unter Windows oder Mac aussieht.



Unter Windows so: (unten etwas abgeschnitten, Chance und alles was danach folgt sieht man nicht)


----------



## Private Void (28. Mai 2010)

Wie kann man sowas verhindern, dass die Fensterhöhe von den verschiedenen Betriebssystemen anscheinend unterschiedlich interpretiert wird? Oder sind die JButtons unterschiedlich groß?

Ich hab's jetzt nochmal mit einer größeren Fensterhöhe hochgeladen.

PS: Unter dem Chance-Button kommt sowieso nichts mehr.


----------



## Private Void (29. Mai 2010)

Ich hab gerade einen kleinen Fehler behoben, der auftrat, wenn man ein viertes mal auf den roll-Button geklickt hat.


----------



## hoernchen (28. Jan 2011)

Ich finds einfach nur geil


----------



## ARadauer (28. Jan 2011)

hoernchen hat gesagt.:


> Ich finds einfach nur geil


echt? was?


----------



## Quaxli (28. Jan 2011)

Da will wohl jemand die Anzahl seiner Beiträge erhöhen... :autsch:


----------



## Tomate_Salat (28. Jan 2011)

Quaxli hat gesagt.:


> Da will wohl jemand die Anzahl seiner Beiträge erhöhen... :autsch:



wenn man sich so seine letzten 3 Posts anschaut, haste wohl recht


----------

