Schere, Stein, Papier im Terminal

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Schere, Stein, Papier im Terminal

    Neu

    Hallo Leute,

    ich wollte das Schere, Stein, Papier mal zeigen. Nachdem Lichtjaeger mich auf async und await gebracht hat habe ich das alles meinem Kumpel gezeigt und der hat dann die anderen wesentlichen Teile gebaut. Ist längst noch nicht fertig!

    JavaScript-Quellcode

    1. const readline = require('readline')
    2. const rl = readline.createInterface({
    3. input: process.stdin,
    4. output: process.stdout
    5. })
    6. const possibilitys = new Array('Schere', 'Stein', 'Papier')
    7. //const points = new Array(0,0)
    8. module.exports = {
    9. play: play
    10. }
    11. async function play() {
    12. rl.write('Herzlich Willkommen zu Schere Stein Papier\nDrücken Sie Enter um zu Starten\n')
    13. await waitForEnter()
    14. //displaypoints()
    15. //rl.write('ready!!\n')
    16. /*let answer = await asyncQuestion('What do you think of Node.js? ')
    17. console.log(`Thank you for your valuable feedback: ${answer}`)
    18. rl.close()*/
    19. Array.from({length: 1})
    20. .reduce((acc) => acc.then((res) =>
    21. round().then((result) => {
    22. res.push(result);
    23. return res;
    24. })
    25. ), Promise.resolve([]))
    26. .then((results) => results.map((winner, round) => {
    27. if (winner == 0) {
    28. console.log(`Runde ${round+1} hat keiner gewonnen`);
    29. } else {
    30. console.log(`Runde ${round+1} hat Spieler ${winner} gewonnen`);
    31. }
    32. return (winner == 2) ? -1 : winner;
    33. }))
    34. .then((results) => results.reduce((acc, cur) => acc + cur))
    35. .then((result) => {
    36. if (result == 0)
    37. console.log('Es gab keinen Gewinner');
    38. else
    39. console.log(`Spieler ${((result>0)?1:2) == 1 ? 1 : 'Computer'} hat gewonnen!`);
    40. process.exit(0);
    41. });
    42. }
    43. var round = () => new Promise(async (resolve) => {
    44. let p1 = (await zug(1)).name;
    45. let p2 = (await computermove()).name;
    46. resolve((p1 - p2 == 0) ? 0 : ((p1 - p2 == 1 || p1 - p2 == -2) ? 1 : 2));
    47. });
    48. function zug(spieler) {
    49. return new Promise(resolve => {
    50. rl.write(`Spieler ${spieler}, treffe deine Wahl: 1) Schere 2) Stein 3) Papier\n`);
    51. process.stdin.on('keypress', function onKeypress(letter, key) {
    52. if (key && "123".indexOf(key.name) !== -1) {
    53. process.stdin.removeListener('keypress', onKeypress);
    54. rl.write('\n');
    55. resolve(key);
    56. }
    57. });
    58. });
    59. }
    60. function asyncQuestion(question) {
    61. return new Promise(resolve => rl.question(question, resolve))
    62. }
    63. function waitForEnter() {
    64. return new Promise(resolve => {
    65. process.stdin.on('keypress', function onKeypress(letter, key) {
    66. readline.moveCursor(process.stdout, -1, 0)
    67. readline.clearLine(process.stdout, 1)
    68. if (key && key.name === 'return') {
    69. process.stdin.removeListener('keypress', onKeypress)
    70. resolve()
    71. }
    72. })
    73. })
    74. }
    75. function displaypossibilitys(){
    76. possibilitys.forEach(function(input){
    77. console.log(input)
    78. })
    79. }
    80. function displaypoints(){
    81. console.log(`Aktueller Spielstand:\nMensch ${points[0]} Computer ${points[1]}\n`)
    82. }
    83. function randomchoice(){
    84. return possibilitys[Math.floor(Math.random() * 3)]
    85. }
    86. /*function computermove(){
    87. setTimeout(() => console.log('"Ching"'), 1000)
    88. setTimeout(() => console.log('"Chang"'), 2000)
    89. setTimeout(() => console.log('"Chong"'), 3000)
    90. setTimeout(() => console.log(`\nComputer hat: ${randomchoice()}`), 4000)
    91. }*/
    92. var computermove = () => new Promise((resolve) => {
    93. setTimeout(() => console.log('"Ching"'), 1000);
    94. setTimeout(() => console.log('"Chang"'), 2000);
    95. setTimeout(() => console.log('"Chong"'), 3000);
    96. setTimeout(() => {
    97. let wahl = randomchoice();
    98. console.log(`\nComputer hat: ${wahl}`);
    99. resolve(wahl);
    100. }, 4000);
    101. });
    102. /*function getchoice(input){
    103. console.log("Triff eine Wahl:")
    104. if( possibilitys.includes(input) ){
    105. return console.log(input)
    106. } else {
    107. return console.log("Willst du spielen oder nicht?")
    108. }
    109. }*/
    Alles anzeigen
    Ich hör jetzt erstmal damit auf und mach andere Sachen. Aber ich werde dieses Programm immer mal wieder anschauen und durchdenken. Hoffe es ist auch für andere ein Beispiel wie man Sachen schreiben kann.

    Grüße
  • Neu

    Felix K. schrieb:

    Wie verschiebe ich das Thema?
    Das macht der Admin.


    Felix K. schrieb:

    Und wenn ich das Programm unter GPL stellen möchte was muss ich wo hinschreiben?
    In der "package.json" schribst du im Feld "license" erstmal "GPL-3".
    Als nächstes legst du eine "LICENSE" (ohne Dateierweiterung) Textdatei im root deines Projektes an. In diese kopierst du folgenden Text:


    Quellcode

    1. <Name des Programmes und kurze Beschreibung>
    2. Copyright (C) <Jahr> <Dein Name>
    3. This program is free software: you can redistribute it and/or modify
    4. it under the terms of the GNU General Public License as published by
    5. the Free Software Foundation, either version 3 of the License, or
    6. (at your option) any later version.
    7. This program is distributed in the hope that it will be useful,
    8. but WITHOUT ANY WARRANTY; without even the implied warranty of
    9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    10. GNU General Public License for more details.
    11. You should have received a copy of the GNU General Public License
    12. along with this program. If not, see <https://www.gnu.org/licenses/>.
    Alles anzeigen
  • Neu

    Nein brauchst du nicht.

    Wenn du auf der sicheren Seite sein willst, kannst du aber in Zukunft folgendes machen:

    Ein Ausschnitt aus einem Programmcode ist ja im wesentlichen ein Zitat und wie bei einem Zitat üblich, ist eine Quellenangabe notwendig.

    Verweise also einfach irgendwo in deinem Post auf die Projekt-/Repositoryseite deines Projektes. Die entsprechende Richtlinienvereinbarung ist dann ja durch die LICENSE-file direkt ersichtlich. Das brauchst du dann entsprechend nur ein mal zu machen.