Hintergrundfarbe auslesen und zufällig bestimmen.

  • Antworten:30
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 14:09:19 via Website

Hallo, ich versuche ein "Spiel" zu programmieren wo es 3 Buttons gibt(rot,grünn,blau) und ein Countdown und in den 30sek muss man so oft die richtigee Farbe(wie die Farbe des Hintergrundes) tippen wie möglich.Jemand ne Idee wie ich wenn ich zum beispiel den Button "grün" geklickt habe,auslesen kann ob die HIntergrund farbe auch grün ist?Und wie kann ich (wenn es richtig war) eine neue zufällige HIntergrundfarbe(rot ,grün oder blau) übernehmen?

Antworten
swa00
  • Forum-Beiträge: 3.704

29.08.2016, 14:27:23 via Website

Hallo Niesse.

du musst in deiner App die Hintergrundfarbe setzen und den gesetzten Wert behalten,
Stimmt der gemerkte Wert mit dem Gedrückten überein , dann hast du einen Treffer.

Ich möchte Dir anbei noch etwas zum Lesen geben :

http://openbook.rheinwerk-verlag.de/javainsel/

https://developer.android.com/training/index.html
http://www.tutorialspoint.com/android/

— geändert am 30.08.2016, 09:14:02

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 14:27:41 via Website

Hallo Niessie,
Ich habe deinen Thread mal in den Entwicklerbereich verschoben, da passt er besser als bei den Snippets.

Ich neheme jetzt mal an du Programmierst in Java:

Countdown -> CowntdownTimer
Farbe des Hintergrunds ist einfach die Background Color, diese kannst du setzen oder auslesen.
Zufällige hintergrundfarbe geht mit z.b. erzeugung einer Zufallszahl und deren Verarbeitung.

Ansonsten sind das nurnoch ein paar if befehle etc.

Natürlich kannst du dir auch ein Datenmodell dahinter bauen, dann musst du nicht dauerhaft mit den Views arbeiten

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 14:56:53 via Website

Danke werde die lInks mal durchschauen,es könnte seien das wir sogar noch ein Java buch zuhause haben..

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 14:59:58 via Website

Ja in Java "mit" AndroidStudio.Wie ich die BackgroundColor setze weiß ich: layout(id vom RelativLayout).setBackgroundColor(Color.[Farbe]); Aber ich weiß nicht wie ich die über ein if befehl ausgelesen bekomme.Also if weiß ich aber welcher command? also z.b. layout.isbackgroundcolor... oder wie lautet der Befehl?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 15:01:48 via Website

Schau dir das mal an:

http://stackoverflow.com/a/8089242

wenn man das so macht dann einfach weiter:

if(colorId == Color.Blue) ...

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 15:48:22 via Website

Ich glaub ich mach was falsch.. Sorry aber mit den Ifs bin ich noch nicht so..

 if (layout.getBackground() == Color.GREEN );

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 16:04:23 via Website

Wie wärs denn so:

if(((ColorDrawable) button.getBackground()).getColor() == Color.GREEN)
{
-...
}
Aber anderer ansatz:
Wie wärs wenn du dir die aktuelle Farbe in einer Klasse speicherst, dann musst du nicht immer per get die Farbe laden

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 16:27:26 via Website

So,habe jetzt programmiert das der Countdown geht,wenn man auf Play drückt,der Play button verschwindet,die Spielflächen auftauchen,man dann 30sek. spielen kann und bei 0 wird der Play button sicht bar, und die Spielflächen verschwinden.

Was ich noch brauch:

Die Punkte anzeige. Und das mit dem Hintergrund.Mal ne kurze noch dümmere frage..muss ich bei ColorDrawable was eingeben?oder nur als class Importieren?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 16:35:35 via Website

Bei dem Cast nur die class importieren.
Wenn du aber die Farbe setzen willst, must du im Konstruktor schon die Color konstante übergeben.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

29.08.2016, 16:41:29 via App

Sorry wenn ich dazwischen quatsche, aber wenn der Datentyp int und dessen dazugehörigen Typen ist, ist ein Switch case eleganter und sauberer.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Pascal P.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 16:48:00 via App

Jupp ist es aber lassen wir den TE erstmal machen wie er denkt. Er hat ja mit ifs angefangen ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 17:14:33 via Website

String random = new farbenArrayList.get(new Random().nextInt(farbenArrayList.size()));

AndroidStudio unterschreicht mir das mit dem kommentar ich darf get() nicht mit Int verbinden.Aber in einem Video ging das..Habe die farben in eine arraylist reingepackt und will dann immer zufällig eine raus nehmen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 17:45:08 via App

wie ist die array list definiert?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 17:47:01 via Website

farbenArrayList = new ArrayList<>();

und

ArrayList farbenArrayList;

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 18:02:44 via App

Du musst ja nich den Typ angeben.
ArrayList farbenList = new ArrayList<>();

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 18:30:16 via Website

hm.. habe es mal mit einem Random Zahlen teil versucht und hat in einer extra App auch super funktioniert.Da wird ne Zahl von 1-3 generiert und dann wird die Zahl 1-3 durch einen String an die Farbe des Hintergrund gegeben.Aber da mekkert er rum(bei setBackgroundColor wo man die color definiert,

final String[] farben = {"RED" , "GREEN" , "BLUE"};

                                                 final int rando = (int) (Math.random() * 3);
                                                 layout.setBackgroundColor(Color.(farben[rando]));

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 18:31:23 via App

Was ist denn da die Meldung?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 18:35:08 via Website

cant resolve symbol "farben"

layout.setBackgroundColor(Color.farben[rando]);

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 18:41:08 via Website

Das geht ja auch so nicht ;)
Du kannst nicht auf eine variable per String zugreifen.

Das muss so ausshen:

final int[] farben = {Color.RED ,Color.GREEN ,Color.BLUE};

                                             final int rando = (int) (Math.random() * 3);
                                             layout.setBackgroundColor(farben[rando]);

Du musst aus den Farben direkt ein integer array machen, dann geht es

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 19:00:22 via Website

danke so müsste es gehen.Jetzt noch das ich den bei jedem richtigen Klick der Punkte stand ein hoch geht aber das weiß ich wie

Aber am Ende vom Code sind ja immer diese }

                                                                    }

Klammern aber bei mir macht der hinter der letzten immer noch einen roten Strich und will das ich noch andere Zeichen hinzufüge,wenn ich das mache will er wieder mehr Zeichen...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 19:40:40 via Website

Denn gibt es 2 häufige Lösungen

  1. Du hast irgendwo eine geschweifte Klammer falsch gesetzt und am Ende ist eine zu viel oder fehlt eine.
    In diesem fall musst du die Codedatei von vorne durchgehen, ob jede aufgehende Klammer auch wieder ane schließende an der passenden Position hat.
  2. Du hast irgendwo ein Semikolon ( ; ) vergessen und AS blickt das nicht

— geändert am 29.08.2016, 19:40:53

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 19:56:07 via Website

Habe mal durch geguckt und 6 auf klammern gesehen die keine zu klammer haben.Wenn ich aber unterm code abschnitt eine klammer setze,erkennt er den da unter gelegenen code dann nicht mehr.(das kanns also nicht sein).Wenn ich dann am ende 6Klammern setze,mekkert er immer noch und gibt die Meldung: reached end of file while parsing. ";" habe ich über all ausser bei ifs(nur der if frage satz) und public void,onclick listener und sowas... weiß echt nicht mehr weiter..

package com.example.darius.color;

import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.media.Image;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
    final Button play = (Button) findViewById(R.id.play);
    final ImageButton rot = (ImageButton) findViewById(R.id.rot);
    final ImageButton grün = (ImageButton) findViewById(R.id.grün);
    final ImageButton blau = (ImageButton) findViewById(R.id.blau);
    final TextView zeit = (TextView) findViewById(R.id.zeit);
    final TextView punkte = (TextView) findViewById(R.id.punkte);

    final int[] current_number = {0};



                    play.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            play.setVisibility(View.INVISIBLE);

                            final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                            final int rando = (int) (Math.random() * 3);

                            layout.setBackgroundColor(farben[rando]);

                            zeit.setText("GAMEOVER!!!");
                            rot.setVisibility(View.VISIBLE);
                            grün.setVisibility(View.VISIBLE);
                            punkte.setText("0");
                            blau.setVisibility(View.VISIBLE);







                            new CountDownTimer(30000, 1000) {

                                public void onTick(long millisUntilFinished) {
                                   zeit.setText("seconds remaining: " + millisUntilFinished / 1000);

                                }

                                public void onFinish() {
                                    zeit.setText("GAMEOVER!!!");
                                    rot.setVisibility(View.INVISIBLE);
                                    grün.setVisibility(View.INVISIBLE);
                                    blau.setVisibility(View.INVISIBLE);
                                    play.setVisibility(View.VISIBLE);

                                }

                            }.start();

                             grün.setOnClickListener(new View.OnClickListener() {
                                 @Override
                                 public void onClick(View v) {

                                     if (((ColorDrawable) layout.getBackground()).getColor() == Color.GREEN) {

                                         final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                                         final int rando = (int) (Math.random() * 3);
                                         layout.setBackgroundColor(farben[rando]);

                                         current_number[0]++;

                                     } else {
                                         current_number[0]--;

                                     }


                                 rot.setOnClickListener(new View.OnClickListener() {
                                     @Override
                                     public void onClick(View v) {

                                         if (((ColorDrawable) layout.getBackground()).getColor() == Color.RED) {

                                             final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                                             final int rando = (int) (Math.random() * 3);
                                             layout.setBackgroundColor(farben[rando]);
                                             current_number[0]++;

                                         } else {

                                             current_number[0]--;
                                         }


                                         blau.setOnClickListener(new View.OnClickListener() {
                                             @Override
                                             public void onClick(View v) {

                                                 if (((ColorDrawable) layout.getBackground()).getColor() == Color.BLUE)

                                                 {

                                                     final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                                                     final int rando = (int) (Math.random() * 3);
                                                     layout.setBackgroundColor(farben[rando]);

                                                     current_number[0]++;

                                                 }else{

                                                     current_number[0]--;
                                                 }
                                             }
                                         }
                                     }
                                 }
                                 }
                             }
                        }

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 20:32:52 via Website

Formatier mal deinen Code richtig, af den ersten Blick sehe ich auch nichts...

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 20:57:15 via Website

meinst du "clean project"?Wenn ich formatiere ist er doch weg...

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

29.08.2016, 21:20:22 via Website

Du hast eine Menge an geschweiften Klammern und runde Klammern vergessen oder oder oder.

So sollte es aussehen, wobei das mit den final deklarierten View eine unschöne Sache ist.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        final RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout);
        final Button play = (Button) findViewById(R.id.play);
        final ImageButton rot = (ImageButton) findViewById(R.id.rot);
        final ImageButton grün = (ImageButton) findViewById(R.id.grün);
        final ImageButton blau = (ImageButton) findViewById(R.id.blau);
        final TextView zeit = (TextView) findViewById(R.id.zeit);
        final TextView punkte = (TextView) findViewById(R.id.punkte);

        final int[] current_number = {0};

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                play.setVisibility(View.INVISIBLE);

                final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                final int rando = (int) (Math.random() * 3);

                layout.setBackgroundColor(farben[rando]);

                zeit.setText("GAMEOVER!!!");
                rot.setVisibility(View.VISIBLE);
                grün.setVisibility(View.VISIBLE);
                punkte.setText("0");
                blau.setVisibility(View.VISIBLE);

                new CountDownTimer(30000, 1000) {

                    public void onTick(long millisUntilFinished) {
                        zeit.setText("seconds remaining: " + millisUntilFinished / 1000);

                    }

                    public void onFinish() {
                        zeit.setText("GAMEOVER!!!");
                        rot.setVisibility(View.INVISIBLE);
                        grün.setVisibility(View.INVISIBLE);
                        blau.setVisibility(View.INVISIBLE);
                        play.setVisibility(View.VISIBLE);

                    }

                }.start();
            }
        });

        grün.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (((ColorDrawable) layout.getBackground()).getColor() == Color.GREEN) {

                    final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                    final int rando = (int) (Math.random() * 3);
                    layout.setBackgroundColor(farben[rando]);

                    current_number[0]++;

                } else {
                    current_number[0]--;

                }
            }
        });

        rot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (((ColorDrawable) layout.getBackground()).getColor() == Color.RED) {

                    final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                    final int rando = (int) (Math.random() * 3);
                    layout.setBackgroundColor(farben[rando]);
                    current_number[0]++;

                } else {

                    current_number[0]--;
                }
            }
        });

        blau.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (((ColorDrawable) layout.getBackground()).getColor() == Color.BLUE)

                {

                    final int[] farben = {Color.RED, Color.GREEN, Color.BLUE};


                    final int rando = (int) (Math.random() * 3);
                    layout.setBackgroundColor(farben[rando]);

                    current_number[0]++;

                } else {

                    current_number[0]--;
                }
            }
        });
    }
}

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Pascal P.Niessie H

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 21:26:53 via Website

OMG danke<3Der code war einbisschen zusamm gebastelt deswegen.

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 22:01:47 via Website

Funktioniert :D Aber wenn ich current_number++ mache erhöht sich der Punktewert nicht.jemand ne Idee?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

29.08.2016, 22:14:36 via Website

Jarum wohl,
current_number ist bei dir als array definiert, [array]++ dürfte garnicht gehen.
du musst current_number als einziges integer definieren, dann kannst du auch mit ++ hochzählen
btw. das array macht garkeinen sinn.

PS: Current umber erhöht sich schon du hast nur keine Anzeige, welche sich aktualisiert.
Woran machst du das fest, dass es nicht geht?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Niessie H
  • Forum-Beiträge: 18

29.08.2016, 22:24:43 via Website

In etwa so? Integer current_number = (0)

...

current_number++; aber da unterstreicht er wieder das Ende.

Antworten
Haakon T.
  • Forum-Beiträge: 375

29.08.2016, 22:29:08 via Website

Niessie H

In etwa so? Integer current_number = (0)

Mach doch mal folgendes: Hier findest du eine Auswahl an Einsteigerliteratur, und dort studierst du die ersten Seiten. Das wird dir wesentlich weiter helfen, als wildes rumraten und probieren, wie wohl etwas funktionieren könnte.

swa00Pascal P.

Antworten