1"use strict";(self.webpackChunkmy_website=self.webpackChunkmy_website||[]).push([[8823],{9732:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>d,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>h});const s=JSON.parse('{"id":"modules-docs/game-move-calculation","title":"Think","description":"Berechnung des n\xe4chsten Spielzugs in einem Brettspiel","source":"@site/docs/modules-docs/game-move-calculation.md","sourceDirName":"modules-docs","slug":"/modules-docs/game-move-calculation","permalink":"/docs/modules-docs/game-move-calculation","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"description":"Berechnung des n\xe4chsten Spielzugs in einem Brettspiel"},"sidebar":"tutorialSidebar","previous":{"title":"Args_Parser","permalink":"/docs/modules-docs/game-configuration-and-cli-arguments-processing"},"next":{"title":"Shared_Memory","permalink":"/docs/modules-docs/multi-process-shared-memory-management"}}');var l=i(4848),r=i(8453);const t={description:"Berechnung des n\xe4chsten Spielzugs in einem Brettspiel"},d="Think",c={},h=[{value:"\xdcbersicht und Zweck",id:"\xfcbersicht-und-zweck",level:2},{value:"Wichtige Funktionen",id:"wichtige-funktionen",level:2},{value:"think Funktion (think.c)",id:"think-funktion-thinkc",level:3},{value:"get_board_index (util.c)",id:"get_board_index-utilc",level:3},{value:"count_pieces (nmm.c)",id:"count_pieces-nmmc",level:3},{value:"is_game_over (nmm.c)",id:"is_game_over-nmmc",level:3},{value:"Schnittstellen",id:"schnittstellen",level:2},{value:"Header-Dateien",id:"header-dateien",level:3},{value:"Globale Variablen",id:"globale-variablen",level:3},{value:"Implementierungsdetails",id:"implementierungsdetails",level:2},{value:"Logik in think.c",id:"logik-in-thinkc",level:3},{value:"Hilfsfunktionen in util.c",id:"hilfsfunktionen-in-utilc",level:3},{value:"Spiellogik in nmm.c",id:"spiellogik-in-nmmc",level:3},{value:"Beispielaufrufe",id:"beispielaufrufe",level:2},{value:"Aufruf der Funktion <code>think</code>",id:"aufruf-der-funktion-think",level:3},{value:"Nutzung der Funktion <code>get_board_index</code>",id:"nutzung-der-funktion-get_board_index",level:3}];function o(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n.header,{children:(0,l.jsx)(n.h1,{id:"think",children:"Think"})}),"\n",(0,l.jsxs)(n.h1,{id:"dokumentation-des-verzeichnisses-think",children:["Dokumentation des Verzeichnisses ",(0,l.jsx)(n.code,{children:"think"})]}),"\n",(0,l.jsx)(n.h2,{id:"\xfcbersicht-und-zweck",children:"\xdcbersicht und Zweck"}),"\n",(0,l.jsxs)(n.p,{children:["Das Verzeichnis ",(0,l.jsx)(n.code,{children:"think"})," enth\xe4lt den Code zur Berechnung des n\xe4chsten Spielzuges in einem strategischen Brettspiel. Das System verwendet geteilte Speichersegmente f\xfcr den Datenaustausch und Interprozesskommunikation. Die enthaltenen Dateien und ihre Hauptfunktionen sind:"]}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"think.h"}),": Deklariert die Schnittstellen f\xfcr das Modul ",(0,l.jsx)(n.code,{children:"think"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"think.c"}),": Implementiert die Logik zur Berechnung eines n\xe4chsten Spielzugs."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"util.h"})," und ",(0,l.jsx)(n.code,{children:"util.c"}),": Helferfunktionen zur Spielfeldverwaltung."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"nmm.h"})," und ",(0,l.jsx)(n.code,{children:"nmm.c"}),': Funktionalit\xe4ten zur Verwaltung des Spiels "Nine Men\'s Morris".']}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"README.md"}),": Beschreibt das Modul ",(0,l.jsx)(n.code,{children:"think"})," und seine Funktionalit\xe4t."]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"wichtige-funktionen",children:"Wichtige Funktionen"}),"\n",(0,l.jsx)(n.h3,{id:"think-funktion-thinkc",children:"think Funktion (think.c)"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Zweck"}),": Berechnet den n\xe4chsten Zug basierend auf dem aktuellen Spielzustand."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Parameter"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"char *gameState"}),": Zeiger auf den Spielzustand im Shared Memory."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"R\xfcckgabewert"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"int"}),": Gibt ",(0,l.jsx)(n.code,{children:"EXIT_SUCCESS"})," bei Erfolg und ",(0,l.jsx)(n.code,{children:"EXIT_FAILURE"})," bei Fehler zur\xfcck."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Hinweise"}),": Nutzt Pipes zur Kommunikation zwischen Prozessen."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"get_board_index-utilc",children:"get_board_index (util.c)"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Zweck"}),": Berechnet den Index eines gegebenen Spielbrettplatzes."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Parameter"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"const char *position"}),": Position auf dem Spielbrett als Zeichenkette."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"R\xfcckgabewert"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"int"}),": Index auf dem Spielbrett oder ",(0,l.jsx)(n.code,{children:"-1"})," bei ung\xfcltiger Eingabe."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"count_pieces-nmmc",children:"count_pieces (nmm.c)"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Zweck"}),": Z\xe4hlt die Anzahl der Spielsteine eines bestimmten Typs auf dem Brett."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Parameter"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"const char *board"}),": Das aktuelle Spielfeld als Zeichenkette."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"char symbol"}),": Der zu z\xe4hlende Spielstein."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"R\xfcckgabewert"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"int"}),": Anzahl der Spielsteine."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"is_game_over-nmmc",children:"is_game_over (nmm.c)"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Zweck"}),": Bestimmt, ob das Spiel beendet ist."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Parameter"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"const char *board"}),": Das Spielfeld."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"char myPiece"}),": Der Spielstein des Spielers."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"char opponentPiece"}),": Der Spielstein des Gegners."]}),"\n"]}),"\n"]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"R\xfcckgabewert"}),":","\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.code,{children:"bool"}),": ",(0,l.jsx)(n.code,{children:"true"}),", wenn das Spiel vorbei ist, sonst ",(0,l.jsx)(n.code,{children:"false"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"schnittstellen",children:"Schnittstellen"}),"\n",(0,l.jsx)(n.h3,{id:"header-dateien",children:"Header-Dateien"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"think.h"}),": Deklariert die Funktion ",(0,l.jsx)(n.code,{children:"think"}),"."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"util.h"}),": Deklariert Hilfsfunktionen zur Spielfeldmanipulation."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"nmm.h"}),': Deklariert Funktionen f\xfcr die Spiellogik von "Nine Men\'s Morris".']}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"globale-variablen",children:"Globale Variablen"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"pipe_fd[2]"})," (think.h): Datei-Deskriptoren f\xfcr die Pipe, zur Interprozesskommunikation genutzt."]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"implementierungsdetails",children:"Implementierungsdetails"}),"\n",(0,l.jsx)(n.h3,{id:"logik-in-thinkc",children:"Logik in think.c"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Adjazenzliste"}),": Statische Struktur zur Repr\xe4sentation von Verbindungen zwischen Spielbrettpositionen."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Shared Memory"}
1),": Nutzt einen gemeinsamen Speicherbereich, um den Spielzustand zwischen Prozessen zu teilen."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"IPC mit Pipes"}),": Kommuniziert mit anderen Prozessen \xfcber Pipes, um Spielz\xfcge weiterzugeben."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"hilfsfunktionen-in-utilc",children:"Hilfsfunktionen in util.c"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Spielfeldverwaltung"}),": Funktionen zur Umwandlung von Brettpositionen und \xdcberpr\xfcfung von Z\xfcgen."]}),"\n"]}),"\n",(0,l.jsx)(n.h3,{id:"spiellogik-in-nmmc",children:"Spiellogik in nmm.c"}),"\n",(0,l.jsxs)(n.ul,{children:["\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Spielende-Bedingungen"}),": Pr\xfcft, ob ein Spieler weniger als drei Steine hat oder keine Z\xfcge m\xf6glich sind."]}),"\n",(0,l.jsxs)(n.li,{children:[(0,l.jsx)(n.strong,{children:"Zugbestimmung"}),": Bestimmt die n\xe4chste Aktion basierend auf den platzierten Steinen und dem Zugz\xe4hler."]}),"\n"]}),"\n",(0,l.jsx)(n.h2,{id:"beispielaufrufe",children:"Beispielaufrufe"}),"\n",(0,l.jsxs)(n.h3,{id:"aufruf-der-funktion-think",children:["Aufruf der Funktion ",(0,l.jsx)(n.code,{children:"think"})]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-c",children:"char *gameState = /* Zeiger auf den Spielzustand im Shared Memory */;\nint result = think(gameState);\nif (result == EXIT_SUCCESS) {\n // Erfolgreiche Berechnung des n\xe4chsten Zugs\n} else {\n // Fehlerbehandlung\n}\n"})}),"\n",(0,l.jsxs)(n.h3,{id:"nutzung-der-funktion-get_board_index",children:["Nutzung der Funktion ",(0,l.jsx)(n.code,{children:"get_board_index"})]}),"\n",(0,l.jsx)(n.pre,{children:(0,l.jsx)(n.code,{className:"language-c",children:'const char *position = "A1";\nint index = get_board_index(position);\nif (index != -1) {\n // G\xfcltiger Index\n} else {\n // Fehlerhafte Position\n}\n'})}),"\n",(0,l.jsxs)(n.p,{children:["Diese Dokumentation bietet eine umfassende \xdcbersicht \xfcber die Struktur und Funktionalit\xe4t des Verzeichnisses ",(0,l.jsx)(n.code,{children:"think"}),". Entwickler k\xf6nnen diese Informationen nutzen, um das Modul in ein gr\xf6\xdferes System zu integrieren oder zu modifizieren."]})]})}function u(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,l.jsx)(n,{...e,children:(0,l.jsx)(o,{...e})}):o(e)}},8453:(e,n,i)=>{i.d(n,{R:()=>t,x:()=>d});var s=i(6540);const l={},r=s.createContext(l);function t(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(l):e.components||l:t(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.