Note that there are some explanatory texts on larger screens.

plurals
  1. POAdding split-screen multiplayer to c++ game
    primarykey
    data
    text
    <p>I am coding for the NDS in c++ with libnds, but this question is not NDS-Specific. I currently have a text-based game in which the top screen just displays a logo, and you play on the bottom screen.</p> <p>So I want to add a type of single-DS multiplayer in which one player plays on the top screen, and the other on the bottom. I dont have a problem with setting up the text engine with both screens, I just need to find a method of efficiently coding in multiplayer. Below I wrote a summary or simplified version of it.</p> <p>Note: consoleClear() clears the screen and the only spot where the game stops is att the pause function.</p> <pre><code>//Headers void display(int x,int y,const char* output)) { printf("\x1b[%d;%dH%s", y, x,output); } void pause(KEYPAD_BITS key) //KEYPAD_BITS is an ENUM for a key on the NDS { scanKeys(); while (keysHeld() &amp; key) { scanKeys(); swiWaitForVBlank(); } while (!(keysHeld() &amp; key)) { scanKeys(); swiWaitForVBlank(); } return; } void pause() //Only used to simplify coding { pause(KEY_A); return; } int main(void) { //Initializations/Setup while (1) { if (rand()%2==1) //Say Hello { if (rand()%3!=1) //To Friend (greater chance of friend than enemy) { display(6,7,"Hello Friend!"); display(6,8,"Good greetings to you."); pause(); consoleClear(); //Clears text display(6,7,"Would you like to come in?"); pause(); //Normally more complex complex code (such as interactions with inventories) would go here } else //To enemy { display(6,7,"Hello enemy!"); display(6,8,"I hate you!"); pause(); consoleClear(); display(6,7,"Leave my house right now!!!"); pause(); } } else //Say goodbye { if (rand()%4==1) //To Friend (lesser chance of friend than enemy) { display(6,7,"Goodbye Friend!"); display(6,8,"Good wishes to you."); pause(); consoleClear(); display(6,7,"I'll see you tomorrow."); pause(); consoleClear(); display(6,7,"Wait, I forgot to give you this present."); pause(); } else //To enemy { display(6,7,"Goodbye enemy!"); display(6,8,"I hate you!"); pause(); consoleClear(); display(6,7,"Never come back!!"); pause(); consoleClear(); display(6,7,"Good riddance!"); //I think I spelt that wrong... pause(); } } } } </code></pre> <p>I know gotos are confusing and can be considered a bad habit, but I cant think of a better way. My version of integrating multiplayer:</p> <pre><code>//Headers and same functions int game(int location) { switch (location) { case 1: goto one; break; case 2: goto two; break; case 3: goto three; break; case 4: goto four; break; case 5: goto five; break; case 6: goto six; break; case 7: goto seven; break; case 8: goto eight; break; case 9: goto nine; break; case 10: goto ten; break; default: break; } if (rand()%2==1) //Say Hello { if (rand()%3!=1) //To Friend (greater chance of friend than enemy) { display(6,7,"Hello Friend!"); display(6,8,"Good greetings to you."); return 1; one:; consoleClear(); //Clears text display(6,7,"Would you like to come in?"); return 2; two:; //Normally more complex complex code (such as interactions with inventories) would go here } else //To enemy { display(6,7,"Hello enemy!"); display(6,8,"I hate you!"); return 3; three:; consoleClear(); display(6,7,"Leave my house right now!!!"); return 4; four:; } } else //Say goodbye { if (rand()%4==1) //To Friend (lesser chance of friend than enemy) { display(6,7,"Goodbye Friend!"); display(6,8,"Good wishes to you."); return 5; five:; consoleClear(); display(6,7,"I'll see you tomorrow."); return 6; six:; consoleClear(); display(6,7,"Wait, I forgot to give you this present."); return 7; seven:; } else //To enemy { display(6,7,"Goodbye enemy!"); display(6,8,"I hate you!"); return 8; eight:; consoleClear(); display(6,7,"Never come back!!"); return 9; nine:; consoleClear(); display(6,7,"Good riddance!"); //I think I spelt that wrong... return 10; ten:; } return -1; } } int main(void) { //Initializations/Setup int location1 = -1, location2 = -1; location1 = game(location1); location2 = game(location2); while (1) { scanKeys(); //Whenever checking key state this must be called if (keysDown() &amp; KEY_A) //A key is used to continue for player1 location1 = game(location1); if (keysDown() &amp; KEY_DOWN) //Down key is used to continue for player2 location2 = game(location2); } } </code></pre> <p>Aside from this method being a bad practice, in the actual source code, I have hundreds of gotos I would need to add which would be too time consuming.</p> <p>Any help is appreciated. If anyone has the slightest of a question, or answer, please ask/reply.</p> <p>Edit: Though it is not preferred to do so, I am willing to rewrite the game from scratch if someone has a method to do so.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload