[nur Hilfe und konstruktive, angemessene Kritik] TicTacToe (Schüler)

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

  • [nur Hilfe und konstruktive, angemessene Kritik] TicTacToe (Schüler)

    Also, hab mich mal an TicTacToe versucht, und, was ist, es macht nicht immer das was es soll, hab die brutale Methode genommen, alles durchzugehen, kann mir jemand helfen den Fehler zu finden? Ich weiß, ist nicht die beste Methode, aber vorher, wo nicht alles drin war, hats gefuntzt, und nicht ärgern, hab den Quelltext schon verschönert...
    Außerdem wäre ich froh, wenn mir jemand sagen könnte, wie ich eine KI baue, bei der man auch verlieren kann? (nicht zu 100% Unentschieden spielen oder Verlieren) Danke schon mal im voraus :D
    Steht nur im Dateianhang, weil es über 15.000 Zeichen geht...

    Wer sich meinen schlechten programmierstil nochmal angucken möchte, für den lass ich den Dateianhang da, wer besseren sehen will wartet bis zum Wochenende...

    edit: hab vom Sturm noch erledigt drin gehabt (nicht wichtig), werde heute irgendwann wahrscheinlich, die bessere Version posten (vielleicht auch morgen).
    mfg gn0m
    Dateien
    • ttt.cpp.txt

      (17,88 kB, 214 mal heruntergeladen, zuletzt: )
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von gn0m ()

  • ??? geht nicht, habs als .txt hochgeladen, wird irgendwo in der KI sein, nur habs nicht gefunden, kompilieren lässt es sich ja...
    edit: vielleicht ist kompiler noch interessant, benutze den g++ auf Linux Open Suse 11.4
    ein Fehler mal eben so: Ich: 1 PC:5 Ich:2 PC:7 Ich 3 und gewonnen??? hab ich nicht gefunden den Fehler
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von gn0m ()

  • @Pocky Es geht über 15.000 Zeichen, nicht Zeilen, hab ich da aber auch geschrieben :D (Bin ich superman, das ich das an einem tag schaffe???), außerdem wär die .txt Datei dann größer :D Vielleicht füge ich einfach mal den Teil ein, den ich wichti finde, also die KI:
    Am anfang das, zum verstehen:

    Quellcode

    1. bool BSpielfeld[3][3];
    2. //zur Überprüfung, ob ein Feld belegt ist
    3. char CSpielfeld[3][3];
    4. CSpielfeld[0][0] = '1';
    5. CSpielfeld[0][1] = '2';
    6. CSpielfeld[0][2] = '3';
    7. CSpielfeld[1][0] = '4';
    8. CSpielfeld[1][1] = '5';
    9. CSpielfeld[1][2] = '6';
    10. CSpielfeld[2][0] = '7';
    11. CSpielfeld[2][1] = '8';
    12. CSpielfeld[2][2] = '9';
    13. //Dient als Spielfeld und zur Anzeige der bereits gesetzten x und o
    14. bool KIZug; //Sorgt dafür, dass KI nur einmal ziehen darf
    15. bool control = false; // damit die erste if anweisung nur einmal ausgeführt wird
    Alles anzeigen


    Quellcode

    1. if(control == false) //Start der KI, um den besten Startpunkt zu bekommen
    2. {
    3. if(CSpielfeld[0][0] == 'x')
    4. {
    5. CSpielfeld[1][1] = 'o';
    6. BSpielfeld[1][1] = true;
    7. KIZug = true;
    8. }
    9. if(CSpielfeld[0][1] == 'x')
    10. {
    11. CSpielfeld[1][1] = 'o';
    12. BSpielfeld[1][1] = true;
    13. KIZug = true;
    14. }
    15. if(CSpielfeld[0][2] == 'x')
    16. {
    17. CSpielfeld[1][1] = 'o';
    18. BSpielfeld[1][1] = true;
    19. KIZug = true;
    20. }
    21. if(CSpielfeld[1][0] == 'x')
    22. {
    23. CSpielfeld[1][1] = 'o';
    24. BSpielfeld[1][1] = true;
    25. KIZug = true;
    26. }
    27. if(CSpielfeld[1][1] == 'x')
    28. {
    29. CSpielfeld[0][0] = 'o';
    30. BSpielfeld[0][0] = true;
    31. KIZug = true;
    32. }
    33. if(CSpielfeld[1][2] == 'x')
    34. {
    35. CSpielfeld[1][1] = 'o';
    36. BSpielfeld[1][1] = true;
    37. KIZug = true;
    38. }
    39. if(CSpielfeld[2][0] == 'x')
    40. {
    41. CSpielfeld[1][1] = 'o';
    42. BSpielfeld[1][1] = true;
    43. KIZug = true;
    44. }
    45. if(CSpielfeld[2][1] == 'x')
    46. {
    47. CSpielfeld[1][1] = 'o';
    48. BSpielfeld[1][1] = true;
    49. KIZug = true;
    50. }
    51. if(CSpielfeld[2][2] == 'x')
    52. {
    53. CSpielfeld[1][1] = 'o';
    54. BSpielfeld[1][1] = true;
    55. KIZug = true;
    56. }
    57. control = true; // damits nur einmal ausgeführt wird
    58. }
    59. // ab hier geht die KI alle möglichkeiten durch, also die brutale Methode
    60. if(CSpielfeld[0][2] && CSpielfeld[1][1] == 'o' && KIZug == false) //Wenn 5 und 3 belege 7
    61. {
    62. if(BSpielfeld[2][0] != true)
    63. {
    64. CSpielfeld[2][0] = 'o';
    65. BSpielfeld[2][0] = true;
    66. KIZug = true;
    67. }
    68. }
    69. if(CSpielfeld[0][0] && CSpielfeld[0][1] == 'o' && KIZug == false) //Wenn 1 und 2 belege 3
    70. {
    71. if(BSpielfeld[0][2] != true)
    72. {
    73. CSpielfeld[0][2] = 'o';
    74. BSpielfeld[0][2] = true;
    75. KIZug = true;
    76. }
    77. }
    78. if(CSpielfeld[2][0] && CSpielfeld[1][1] == 'o' && KIZug == false) //Wenn 7 und 5 belege 3
    79. {
    80. if(BSpielfeld[0][2] != true)
    81. {
    82. CSpielfeld[0][2] = 'o';
    83. BSpielfeld[0][2] = true;
    84. KIZug = true;
    85. }
    86. }
    87. if(CSpielfeld[0][0] && CSpielfeld[1][0] == 'o' && KIZug == false) //Wenn 1 und 4 belege 7
    88. {
    89. if(BSpielfeld[2][0] != true)
    90. {
    91. CSpielfeld[2][0] = 'o';
    92. BSpielfeld[2][0] = true;
    93. KIZug = true;
    94. }
    95. }
    96. if(CSpielfeld[2][0] && CSpielfeld[1][0] == 'o' && KIZug == false) //Wenn 7 und 4 belege 1
    97. {
    98. if(BSpielfeld[2][2] != true)
    99. {
    100. CSpielfeld[2][2] = 'o';
    101. BSpielfeld[2][2] = true;
    102. KIZug = true;
    103. }
    104. }
    105. if(CSpielfeld[1][1] && CSpielfeld[0][1] == 'o' && KIZug == false) //Wenn 2 und 5 belege 8
    106. {
    107. if(BSpielfeld[2][1] != true)
    108. {
    109. CSpielfeld[2][1] = 'o';
    110. BSpielfeld[2][1] = true;
    111. KIZug = true;
    112. }
    113. }
    114. if(CSpielfeld[2][2] && CSpielfeld[1][1] == 'o' && KIZug == false) //Wenn 9 und 5 belege 1
    115. {
    116. if(BSpielfeld[0][0] != true)
    117. {
    118. CSpielfeld[0][0] = 'o';
    119. BSpielfeld[0][0] = true;
    120. KIZug = true;
    121. }
    122. }
    123. if(CSpielfeld[0][0] && CSpielfeld[2][0] == 'o' && KIZug == false) //Wenn 1 und 7 belege 4
    124. {
    125. if(BSpielfeld[1][0] != true)
    126. {
    127. CSpielfeld[1][0] = 'o';
    128. BSpielfeld[1][0] = true;
    129. KIZug = true;
    130. }
    131. }
    132. if(CSpielfeld[2][0] && CSpielfeld[2][2] == 'o' && KIZug == false) // wenn 7 und 9 belege 8
    133. {
    134. if(BSpielfeld[2][1] != true)
    135. {
    136. CSpielfeld[2][1] = 'o';
    137. BSpielfeld[2][1] = true;
    138. KIZug = true;
    139. }
    140. }
    141. if(CSpielfeld[2][0] && CSpielfeld[2][1] == 'o' && KIZug == false) // wenn 7 und 8 belege 9
    142. {
    143. if(BSpielfeld[2][2] != true)
    144. {
    145. CSpielfeld[2][2] = 'o';
    146. BSpielfeld[2][2] = true;
    147. KIZug = true;
    148. }
    149. }
    150. if(CSpielfeld[2][2] && CSpielfeld[2][1] == 'o' && KIZug == false) // Wenn 9 und 8 belege 7
    151. {
    152. if(BSpielfeld[2][0] != true)
    153. {
    154. CSpielfeld[2][0] = 'o';
    155. BSpielfeld[2][0] = true;
    156. KIZug = true;
    157. }
    158. }
    159. if(CSpielfeld[0][2] && CSpielfeld[2][2] == 'o' && KIZug == false) // Wenn 9 und 3 belege 6
    160. {
    161. if(BSpielfeld[1][2] != true)
    162. {
    163. CSpielfeld[1][2] = 'o';
    164. BSpielfeld[1][2] = true;
    165. KIZug = true;
    166. }
    167. }
    168. if(CSpielfeld[0][2] && CSpielfeld[0][1] == 'o' && KIZug == false) //Wenn 3 und 2 belege 1
    169. {
    170. if(BSpielfeld[0][0] != true)
    171. {
    172. CSpielfeld[0][0] = 'o';
    173. BSpielfeld[0][0] = true;
    174. KIZug = true;
    175. }
    176. }
    177. if(CSpielfeld[0][2] && CSpielfeld[1][1] == 'o' && KIZug == false) //Wenn 5 und 3 belege 7
    178. {
    179. if(BSpielfeld[2][0] != true)
    180. {
    181. CSpielfeld[2][0] = 'o';
    182. BSpielfeld[2][0] = true;
    183. KIZug = true;
    184. }
    185. }
    186. if(CSpielfeld[0][0] && CSpielfeld[0][1] == 'x' && KIZug == false) //Wenn 1 und 2 belege 3
    187. {
    188. if(BSpielfeld[0][2] != true)
    189. {
    190. CSpielfeld[0][2] = 'o';
    191. BSpielfeld[0][2] = true;
    192. KIZug = true;
    193. }
    194. }
    195. if(CSpielfeld[2][0] && CSpielfeld[1][1] == 'x' && KIZug == false) //Wenn 7 und 5 belege 3
    196. {
    197. if(BSpielfeld[0][2] != true)
    198. {
    199. CSpielfeld[0][2] = 'o';
    200. BSpielfeld[0][2] = true;
    201. KIZug = true;
    202. }
    203. }
    204. if(CSpielfeld[0][0] && CSpielfeld[1][0] == 'x' && KIZug == false) //Wenn 1 und 4 belege 7
    205. {
    206. if(BSpielfeld[2][0] != true)
    207. {
    208. CSpielfeld[2][0] = 'o';
    209. BSpielfeld[2][0] = true;
    210. KIZug = true;
    211. }
    212. }
    213. if(CSpielfeld[2][0] && CSpielfeld[1][0] == 'x' && KIZug == false) //Wenn 7 und 4 belege 1
    214. {
    215. if(BSpielfeld[2][2] != true)
    216. {
    217. CSpielfeld[2][2] = 'o';
    218. BSpielfeld[2][2] = true;
    219. KIZug = true;
    220. }
    221. }
    222. if(CSpielfeld[1][1] && CSpielfeld[0][1] == 'x' && KIZug == false) //Wenn 2 und 5 belege 8
    223. {
    224. if(BSpielfeld[2][1] != true)
    225. {
    226. CSpielfeld[2][1] = 'o';
    227. BSpielfeld[2][1] = true;
    228. KIZug = true;
    229. }
    230. }
    231. if(CSpielfeld[2][2] && CSpielfeld[1][1] == 'x' && KIZug == false) //Wenn 9 und 5 belege 1
    232. {
    233. if(BSpielfeld[0][0] != true)
    234. {
    235. CSpielfeld[0][0] = 'o';
    236. BSpielfeld[0][0] = true;
    237. KIZug = true;
    238. }
    239. }
    240. if(CSpielfeld[0][0] && CSpielfeld[2][0] == 'x' && KIZug == false) //Wenn 1 und 7 belege 4
    241. {
    242. if(BSpielfeld[1][0] != true)
    243. {
    244. CSpielfeld[1][0] = 'o';
    245. BSpielfeld[1][0] = true;
    246. KIZug = true;
    247. }
    248. }
    249. if(CSpielfeld[2][0] && CSpielfeld[2][2] == 'x' && KIZug == false) // wenn 7 und 9 belege 8
    250. {
    251. if(BSpielfeld[2][1] != true)
    252. {
    253. CSpielfeld[2][1] = 'o';
    254. BSpielfeld[2][1] = true;
    255. KIZug = true;
    256. }
    257. }
    258. if(CSpielfeld[2][0] && CSpielfeld[2][1] == 'x' && KIZug == false) // wenn 7 und 8 belege 9
    259. {
    260. if(BSpielfeld[2][2] != true)
    261. {
    262. CSpielfeld[2][2] = 'o';
    263. BSpielfeld[2][2] = true;
    264. KIZug = true;
    265. }
    266. }
    267. if(CSpielfeld[2][2] && CSpielfeld[2][1] == 'x' && KIZug == false) // Wenn 9 und 8 belege 7
    268. {
    269. if(BSpielfeld[2][0] != true)
    270. {
    271. CSpielfeld[2][0] = 'o';
    272. BSpielfeld[2][0] = true;
    273. KIZug = true;
    274. }
    275. }
    276. if(CSpielfeld[0][2] && CSpielfeld[2][2] == 'x' && KIZug == false) // Wenn 9 und 3 belege 6
    277. {
    278. if(BSpielfeld[1][2] != true)
    279. {
    280. CSpielfeld[1][2] = 'o';
    281. BSpielfeld[1][2] = true;
    282. KIZug = true;
    283. }
    284. }
    285. if(CSpielfeld[0][2] && CSpielfeld[0][1] == 'x' && KIZug == false) //Wenn 3 und 2 belege 1
    286. {
    287. if(BSpielfeld[0][0] != true)
    288. {
    289. CSpielfeld[0][0] = 'o';
    290. BSpielfeld[0][0] = true;
    291. KIZug = true;
    292. }
    293. }
    294. if(CSpielfeld[0][0] && CSpielfeld[0][2] == 'x' && KIZug == false) //Wenn 1 und 3 belege 2
    295. {
    296. if(BSpielfeld[0][1] != true)
    297. {
    298. CSpielfeld[0][1] = 'o';
    299. BSpielfeld[0][1] = true;
    300. KIZug = true;
    301. }
    302. }
    Alles anzeigen
    Du bist Terrorist, warum? Siehe hier
  • @Pocky Ich versuchs einfach mal in Klassen zu erstellen, verstehe nämlich noch immer einiges nicht in c++(templates, try-catch, und einige andere Funkionen), bitte nicht sauer sein wenn ich soviel frage, ok?
    Habt Mitleid mit einem Schüler!!! (Nicht Student, das kommt erst ganz viel später)
    mfg gn0m
    edit: immerhin bin ich kein Scriptkiddie mehr, das kann ich nach über 3 Jahren festem lernen aller möglichen Sprachen behaupten, C++ kann ich davon am besten.
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von gn0m ()

  • Was für Fehler sollst du den haben?

    gn0m schrieb:


    ein Fehler mal eben so: Ich: 1 PC:5 Ich:2 PC:7 Ich 3 und gewonnen??? hab ich nicht gefunden den Fehler

    Und wo ist da der Fehler?
    Die Anwendung macht nur das was du programmeirt hast.

    Ansonsten würde ich dir Dringen das Projekt neu zu machen und bevor du beginst schreib dir die Logik auf nen Blatt Papier.
    ->Versuche ähnlichen Programmierabschnitte durch einen kürzeren Code zu ersetzen.

    Ne KI kannst du unter anderem mit Zuffalszahlen realisieren. (->srand, rand)

    Mfg Rushh0ur
  • Ja ich versteh ja schon:

    Quellcode

    1. Moral--;

    Hast ja recht.

    Und hab ja geschrieben ich brauch Praxis, hab aber fast nur gelesen die 3 Jahre über...

    Und eine for-Schleife besteht aus einer Initialisierung, einer Bedingung, und einer Aktion, Beispiel müsste gehen, habs noch nicht probiert, nochmal sry:

    Quellcode

    1. for( ;KIZug == false; )
    2. {
    3. int i = rand() % 9 + 1; // oder halt mit /dev/random für linux
    4. if(KIRandom[i] != 'x' || 'o')
    5. {
    6. KIRandom[i] = 'o';
    7. KIZug = true;
    8. }
    9. }

    Oder ist das auch eine schlechte Lösung?
    @Pocky warum den Thread löschen? Stehen wir halt als schlechtes Beispiel da, zum Code: vom PC gelöscht...
    @CJ, müssen ja keine Freunde sein, Frieden, Streit bringt nur Frust!?
    @Alle anderen: ;( kommt nicht mehr vor so schnell vor, versprochen, hab mich zu schnell reingesteigert...
    edit: @Pocky Warum sollte ich fragen was das soll, sehs ja ein, der Code ist ****, nur CJ hätte (wie ich das Wort 'hätte' liebe...),
    es auch angemessen sagen können, denn ich steiger mich sehr schnell in Sachen rein, und dann wirds primitiv...

    @edit, wird wohl Zeit es offen zu sagen, bringt ja nix es zu verschweigen, sonst versteht ihr in dem Forum mich nicht: Ich bin Asperger Autist (nicht erschrecken ), deshalb werde ich sehr, sehr, schnell aggressiv, ganz ehrlich, hatte die halbe Nacht trainiert nach dem Vorfall, bis ich irgendwann um 3 Uhr ca. müde ins Bett fiel...
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von gn0m ()

  • So oft durchlesen bis du alles verstanden hast!
    Da sind jetzt einige Dinge etwas umständlich gelöst, zeigt aber recht schön wie man das realisieren kann.
    Ist jetzt nicht 100% durchgetestet, Fehler können sich immer irgendwo einschleichen, aber eig muss es gehen.

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main(void)
    4. {
    5. char feld[3][3] = {
    6. {'x', ' ', 'o'},
    7. {'x', 'o', 'x'},
    8. {'o', 'x', 'o'}
    9. }; //Ich geb mal ein Spielfeld vor, nen ganzes Eingabe-ding Programmier ich jetzt nicht
    10. int win[8][2]; //Wir haben 8 gewinnmöglichkeiten für 2 Spiele (3 Zeilen, 3 Reihen, 2 Diagonal)
    11. for(int i = 0; i < 8; i++)
    12. {
    13. win[i][0] = 0;
    14. win[i][1] = 0;
    15. } // Variablen niemals uninitialisiert lassen!
    16. for(int y = 0; y < 3; y++)
    17. {
    18. for(int x = 0; x < 3; x++)
    19. {
    20. cout << feld[y][x];
    21. if(x < 2)
    22. {
    23. cout << "|";
    24. }
    25. }
    26. if(y < 2)
    27. {
    28. cout << endl << "-----" << endl;
    29. }
    30. } // Dieses Konstrukt malt das Spielfeld
    31. cout << endl << endl;
    32. for(int y = 0; y < 3; y++)
    33. {
    34. for(int x = 0; x < 3; x++)
    35. {
    36. if(feld[y][x] == 'x')
    37. {
    38. win[y][0]++;
    39. }
    40. if(feld[y][x] == 'o')
    41. {
    42. win[y][1]++;
    43. }
    44. }
    45. }
    46. for(int y = 0; y < 3; y++)
    47. {
    48. for(int x = 0; x < 3; x++)
    49. {
    50. if(feld[y][x] == 'x')
    51. {
    52. win[x+3][0]++;
    53. }
    54. if(feld[y][x] == 'o')
    55. {
    56. win[x+3][1]++;
    57. }
    58. }
    59. }
    60. for(int x = 0; x < 3; x++)
    61. {
    62. if(feld[x][x] == 'x')
    63. {
    64. win[6][0]++;
    65. }
    66. if(feld[x][x] == 'o')
    67. {
    68. win[6][1]++;
    69. }
    70. if(feld[2-x][x] == 'x')
    71. {
    72. win[7][0]++;
    73. }
    74. if(feld[2-x][x] == 'o')
    75. {
    76. win[7][1]++;
    77. }
    78. }
    79. cout << "Zeile 1: x: " << win[0][0] << " | o: " << win[0][1] << endl;
    80. cout << "Zeile 2: x: " << win[1][0] << " | o: " << win[1][1] << endl;
    81. cout << "Zeile 3: x: " << win[2][0] << " | o: " << win[2][1] << endl << endl;
    82. cout << "Spalte 1: x: " << win[3][0] << " | o: " << win[3][1] << endl;
    83. cout << "Spalte 2: x: " << win[4][0] << " | o: " << win[4][1] << endl;
    84. cout << "Spalte 3: x: " << win[5][0] << " | o: " << win[5][1] << endl << endl;
    85. cout << "Diagonal: x: " << win[6][0] << " | o: " << win[6][1] << " ( oben links -> unten rechts )" << endl;
    86. cout << "Diagonal: x: " << win[7][0] << " | o: " << win[7][1] << " ( oben rechts -> unten links )" << endl << endl;
    87. for(int i = 0; i < 8; i++)
    88. {
    89. if(win[i][0] == 3)
    90. {
    91. cout << "x hat gewonnen" << endl;
    92. return(0);
    93. }
    94. if(win[i][1] == 3)
    95. {
    96. cout << "o hat gewonnen" << endl;
    97. return(0);
    98. }
    99. }
    100. cout << "Niemand hat gewonnen" << endl;
    101. return(0);
    102. }
    Alles anzeigen
  • Den hab ich schon zu 90% verstanden, war eine gute Lösung, nur auf die Idee wär ich nicht gekommen, danke...
    edit: Muss Schluss machen für heute, bis Morgen.
    @CJ: Wenn du was zu sagen hast bitte was produktives, oder lass es, du machst dir, wenn ich mich nicht täusche, grade nen sehr schlechten Ruf hier.
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von gn0m ()

  • Sry, für Doppelpost, aber sonst denkt jeder, dass hier sei erledigt. :D
    Hab aber grad wohl nen Fehler, weil ich den Namen der Funktion nicht weiß.
    Den Befehl, um Daten von dem typ FILE in int umzuwandeln, bwz. wie geht das?

    @Pocky Ist klar, dass ichs nicht so gut wie du hinbekomme,
    hab halt sehr wenig Praxis, fast nur Theorie, deshalb helfe ich viel, um Übung zu bekommen. :D


    Quellcode

    1. for(bool random = true; random == true;)
    2. {
    3. FILE *Zufallswert = fopen("/dev/random", "r");
    4. if (Zufallswert!=NULL)
    5. {
    6. n >> Zufallswert; // Hier ist der Fehler, kann mir einer sagen, wies geht bzw. richtig geht, oder kann man das casten, wohl eher nicht, oder?
    7. //------------- ab hier wird, bzw. soll :) die Zahl ins Array umgerechnet werden.
    8. n %= 9 -1;
    9. if (n > 2)
    10. {
    11. m = n % 3;
    12. }
    13. else{
    14. m = 0;
    15. }
    16. for(;n>2; n-3){};
    17. }
    18. if(feld[m][n] != 'x')
    19. {
    20. feld[m][n] = 'o';
    21. fclose (Zufallswert);
    22. random = false;
    23. }
    24. }
    Alles anzeigen
    Du bist Terrorist, warum? Siehe hier
  • Ich wundere mich zwar warum du die C und nicht die C++ methode anwendest, aber gut
    cplusplus.com/reference/clibrary/cstdio/fread/
    Wenn du englisch kannst ist das eine der besten Seiten


    Wenn ich mich jetzt irre (hab lange nicht mehr mit fread gearbeitet...), müsstest du sowas benütigen:

    Quellcode

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. FILE *file = fopen("main2.c", "r");
    5. int i = 0;
    6. fread(&i, sizeof(i), 1, file); //Hier wird vom der File gelesen
    7. //Hab grad Windoof an, deswegen kann ichs mit /dev/random nicht testen, sollte aber gehen
    8. printf("%i\n", i);
    9. fclose(file);
    10. return(0);
    11. }
    Alles anzeigen
  • @Rondrer Kein Witz, dachte das wär nur für Windows (gerade nachgegooglet),
    aber da das auch mit Linux geht, nehm ich natürlich dann das. :D

    @Pocky, hab das Programm schon in C++ geschrieben, aber mir fehlen halt Praxis:

    Quellcode

    1. #include <cstdio>


    Mag unsauber sein, aber wie gesagt, mir fehlt jede menge Übung.

    Außerdem: Ich hab mir mal was gegönnt, nämlich eine Packung Chips, und hab jetzt fürchterliche Bauchschmerzen... (wahrscheinlich, weil es Discounter Chips waren)
    (eine Hälfte gegessen, andere Hälte der Packung wollte ich wegchmeißen, hat aber jemand anderes drauf bestanden, dass er Sie kriegt.)
    Wenn es sich bis morgen Mittag nicht bessert, melde ich mich nochmal (wenns geht), und mach es Sonntag weiter...

    P.S.: Müsst mich nicht bedauern oder sonst was, nur das ihr drauf eingestellt seid,
    dass ich mich morgen vielleicht gar nicht mehr melde, wenns schlimmer wird, hatte ja gesagt, dass ichs heute und morgen mache...
    Aber ich brauch jetzt einfach Ruhe, hab immer noch 5 Promill Chipsfett intus, lag wohl echt daran, dass sie so fettig waren... :D
    Bin dann auch gleich schon schlafen, schönes Wochenende euch allen.
    mfg gn0m

    edit: Geht wieder, etwas ausgeruht, danach heißen kakao getrunken und jetzt gehts wieder, werd morgen weiter machen.
    Haben in unserem Haus keine richtige Leitung, sondern nur D-Lan Stecker, die haben gehangen, hätte mich sonst schon vor einer halben Stunde gemeldet.

    mfg gn0m

    edit2: Neues noch nicht fertiges TicTacToe, irgendwo hat sich beim Testen ein Fehler eingeschlichen,
    wenn ihn jemand findet, bitte nicht für sich behalten, kann nur Zahlen zwischen 1-3 eingeben, die angenommen werden, hat aber schonmal geklappt.
    Gewinnbedingungen bau ich noch ein, keine Sorge.
    Und ein unbesiegbares Computerspiel mag denke ich auch niemand. :)

    @Pocky, hoffe es ist ok dass ich kleine Teile deines Programms übernommen hab, wenn nein, änder ich das natürlich um.
    hab eigentlich fast nur die Felderstellung übernommen, die fand ich cool gemacht. :)

    Außerdem ganz wichtig: Was kann ich besser machen?
    Bitte nicht so antworten: Einfach alles, oder der ganze Source ist Mist, will ja wissen, wenn ja, warum.
    Danke

    Quellcode

    1. #include <iostream>
    2. #include <cstdlib>
    3. using namespace std;
    4. int main(void)
    5. {
    6. int n, m;
    7. char feld[3][3] = {{'1', '2', '3'},
    8. {'4', '5', '6'},
    9. {'7', '8', '9'}
    10. };
    11. for(int loop = 0; loop <= 9; loop++)
    12. {
    13. cout << "Geben Sie eine Zahl zwischen 1-9 ein, um zu setzen.: ";
    14. cin >> n;
    15. n--;
    16. //------------ Hier liegt glaube ich auch irgendwo der Fehler
    17. if(n>9)
    18. {
    19. cout << "Geben Sie bitte nur Zahlen zwischen 1-9 an!" << endl;
    20. n = 0;
    21. continue;
    22. }
    23. if(n>2){ //wenn eingabe über 2
    24. m = n % 3; // feld[m][] = Rest von Modulo von eingabe, damit es nicht über 2 geht
    25. }
    26. else{ //sonst
    27. m = 0; //wenn eingabe nicht größer als 3, gibt es ja auch keine m Reihe, also m = 0;
    28. }
    29. for(;n>2; n-3){}; // hier wird n auch auf eine gültige Zahl heruntergelassen.
    30. if(feld[m][n] != 'o' || 'x') // wenn das Feld nicht besetzt ist von einem gegnerischen oder eigenen Stein
    31. {
    32. feld[m][n] = 'x'; // setze Stein
    33. }
    34. else // wenn bereits belegt, gebe Text aus, setze n zurück und starte Schleife von vorn
    35. {
    36. cout << "Wählen Sie ein Feld, welches noch nicht belegt ist" << endl;
    37. n = 0;
    38. continue;
    39. }
    40. /*das kommt weiter unten nochmal vor, meine Frage:
    41. lohnt es für doppeltes Vorkommmen schon eine Funktion zu erstellen,
    42. weiß ja genau, dass ich es nicht noch ein drittes mal brauche?
    43. Wäre nicht das Problem, ist nur eine Frage, bevor es doch wieder kritisiert wird.*/
    44. int x, y;
    45. do
    46. {
    47. y = rand()%9;
    48. if (y > 2)
    49. {
    50. x = y % 3;
    51. y--;
    52. }
    53. else{
    54. x = 0;
    55. }
    56. for(;y>2; y-3){};
    57. if(feld[x][y] != 'o' || 'x')
    58. {
    59. feld[y][x] = 'o';
    60. break;
    61. }
    62. }while(true);
    63. for(y = 0; y < 3; y++)
    64. {
    65. for(x = 0; x < 3; x++)
    66. {
    67. cout << feld[y][x];
    68. if(x < 2)
    69. {
    70. cout << "|";
    71. }
    72. }
    73. if(y < 2)
    74. {
    75. cout << endl << "-----" << endl;
    76. }
    77. }
    78. y = 0, x = 0;
    79. cout << endl;
    80. }
    81. }
    Alles anzeigen
    Du bist Terrorist, warum? Siehe hier

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von gn0m ()