<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[variable Spielsteuerung]]></title><description><![CDATA[<p>Hallo zusammen,<br />
hab ein Spiel programmiert bei dem man in alle Richtungen laufen kann. Momentan funktioniert die Steuerung über die Pfeil-Tasten (in einer switch-Anweisung)</p>
<p>Ich möchte jetzt aber das der Spieler selbst bestimmen kann, mit welchen Tasten welche Richtung gesteuert werden soll!</p>
<p>Bei case-Anweisungen kann ich ja nicht mit Variablen arbeiten, oder?<br />
Hat jemand ne Idee wie ich das verwirklichen könnte???</p>
<p>Schon mal vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171992/variable-spielsteuerung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 16:10:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171992.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Jan 2007 12:31:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to variable Spielsteuerung on Wed, 31 Jan 2007 12:31:50 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
hab ein Spiel programmiert bei dem man in alle Richtungen laufen kann. Momentan funktioniert die Steuerung über die Pfeil-Tasten (in einer switch-Anweisung)</p>
<p>Ich möchte jetzt aber das der Spieler selbst bestimmen kann, mit welchen Tasten welche Richtung gesteuert werden soll!</p>
<p>Bei case-Anweisungen kann ich ja nicht mit Variablen arbeiten, oder?<br />
Hat jemand ne Idee wie ich das verwirklichen könnte???</p>
<p>Schon mal vielen Dank im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220439</guid><dc:creator><![CDATA[bpfitzner]]></dc:creator><pubDate>Wed, 31 Jan 2007 12:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to variable Spielsteuerung on Wed, 31 Jan 2007 12:37:26 GMT]]></title><description><![CDATA[<p>Du könntest die Tasten in einem Array unterbringen und dann über ihren Index ansprechen:</p>
<pre><code class="language-cpp">char arrows[4] = {75/*Links*/,72/*Hoch*/,77/*Rechts*/,80/*Runter*/}
//wenn Bedarf besteht, die Werte überschreiben:

switch(memchr(arrows,input,4)-arrows)
{
  case 0: //links
  case 1: //hoch
  case 2: //rechts
  case 3: //runter
  default://unbekannte Taste
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1220443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220443</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 31 Jan 2007 12:37:26 GMT</pubDate></item><item><title><![CDATA[Reply to variable Spielsteuerung on Wed, 31 Jan 2007 13:08:45 GMT]]></title><description><![CDATA[<p>Standard-Alternativ-Vorschlag:</p>
<pre><code class="language-cpp">class foo
{
private:
  typedef char key_t;
  typedef void (foo::*callback_t)();
  typedef std::map&lt;key_t, callback_t&gt; key_binding;

public:
  foo()
  {
    key_bindings_['w'] = &amp;foo::whatever;
    key_bindings_['s'] = &amp;foo::something;
    key_bindings_['S'] = &amp;foo::something;
  }

  void handle_key_press( key_t key )
  {
    key_binding::iterator kit = key_bindings_.find(key);
    if (kit != key_bindings_.end()) {
      (this-&gt;*kit-&gt;second)();
    }
  }

private:
  void whatever()  { std::cout &lt;&lt; &quot;whatever!\n&quot;; }
  void something() { std::cout &lt;&lt; &quot;something!\n&quot;; }

  key_binding key_bindings_;
};

int main()
{
  foo bar;
  bar.handle_key_press('w');
  bar.handle_key_press('s');
  bar.handle_key_press('S');
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1220463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220463</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 31 Jan 2007 13:08:45 GMT</pubDate></item><item><title><![CDATA[Reply to variable Spielsteuerung on Wed, 31 Jan 2007 15:26:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a>:<br />
Danke für den Hinweis werds mal so versuchen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a>:<br />
Ebenfalls Danke! Kann damit leider aber nichts anfangen. Versteh bei dem Quellcode nur Bahnhof! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220581</guid><dc:creator><![CDATA[bpfitzner]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to variable Spielsteuerung on Thu, 01 Feb 2007 12:06:31 GMT]]></title><description><![CDATA[<p>bpfitzner schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a>:<br />
Ebenfalls Danke! Kann damit leider aber nichts anfangen. Versteh bei dem Quellcode nur Bahnhof! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Ist im Prinzip ziemlich simpel. Den Code den du vermutlich direkt in den switch-cases stehen hast packst du in Methoden.<br />
Zur Laufzeit suchst du dir dann die dem Argument entsprechende Methode raus und führst sie aus.</p>
<pre><code class="language-cpp">class spiel
{
private:
  typedef char key_t; // Typ fuer &quot;case-Konstante&quot;
  typedef void (spiel::*callback_t)(); // Typ fuer &quot;case-Code&quot;
  typedef std::map&lt;key_t, callback_t&gt; key_binding; // Unser &quot;switch&quot;-Typ

public:
  spiel()
  {
    key_bindings_['w'] = &amp;spiel::spieler_hoch;   // case 'w': spieler_hoch();
    key_bindings_['a'] = &amp;spiel::spieler_links;  // case 'a': spieler_links();
    key_bindings_['s'] = &amp;spiel::spieler_runter; // case 's': spieler_runter();
    key_bindings_['d'] = &amp;spiel::spieler_rechts; // case 'd': spieler_rechts();
  }

  void handle_key_press( key_t key )
  {
    // unser &quot;switch(key)&quot;:
    // Suche in key_bindings_ nach dem Schluessel 'key'
    key_binding::iterator kit = key_bindings_.find(key);
    // Falls gefunden...
    if (kit != key_bindings_.end()) {
      // ... fuehre die Methode aus
      (this-&gt;*kit-&gt;second)();
    }
    // Falls nicht, koennte hier im else-Zweig der
    // &quot;default:-case&quot; stehen/aufgerufen werden
  }

private:
  void spieler_hoch()   { /* ... */ }
  void spieler_runter() { /* ... */ }
  void spieler_rechts() { /* ... */ }
  void spieler_links()  { /* ... */ }

  key_binding key_bindings_; // Unser &quot;switch&quot;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1220627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220627</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 01 Feb 2007 12:06:31 GMT</pubDate></item><item><title><![CDATA[Reply to variable Spielsteuerung on Wed, 31 Jan 2007 15:59:42 GMT]]></title><description><![CDATA[<p>finix' Lösung ist an sich eleganter, weil der Aufruf nicht durch eine CASE-Entscheidung gelöst wird. Auf der anderen Seite bedeutet dies, dass eine dynamische Liste durchgearbeitet werden muss..</p>
<p>Wie dem auch sei, diese Funktoren haben mich gerade auf einen Gedanken zwecks ByteCode-Interpreter gebracht ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220629</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Wed, 31 Jan 2007 15:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to variable Spielsteuerung on Thu, 01 Feb 2007 07:12:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4239">@finix</a></p>
<p>Danke für die Erklärung! Habs jetzt glaub ich einigermassen verstanden.<br />
Werds jetzt mal versuchen umzusetzen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220884</guid><dc:creator><![CDATA[bpfitzner]]></dc:creator><pubDate>Thu, 01 Feb 2007 07:12:39 GMT</pubDate></item></channel></rss>