<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=C-Kurs%2FTicTacToe%2FMusterl%C3%B6sung</id>
	<title>C-Kurs/TicTacToe/Musterlösung - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.freitagsrunde.org/index.php?action=history&amp;feed=atom&amp;title=C-Kurs%2FTicTacToe%2FMusterl%C3%B6sung"/>
	<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;action=history"/>
	<updated>2026-05-09T00:51:08Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in FreitagsrundenWiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=20481&amp;oldid=prev</id>
		<title>PaulG: verschob „Ckurs/TicTacToe/Musterlösung“ nach „C-Kurs/TicTacToe/Musterlösung“</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=20481&amp;oldid=prev"/>
		<updated>2013-03-05T17:37:17Z</updated>

		<summary type="html">&lt;p&gt;verschob „&lt;a href=&quot;/Ckurs/TicTacToe/Musterl%C3%B6sung&quot; class=&quot;mw-redirect&quot; title=&quot;Ckurs/TicTacToe/Musterlösung&quot;&gt;Ckurs/TicTacToe/Musterlösung&lt;/a&gt;“ nach „&lt;a href=&quot;/C-Kurs/TicTacToe/Musterl%C3%B6sung&quot; title=&quot;C-Kurs/TicTacToe/Musterlösung&quot;&gt;C-Kurs/TicTacToe/Musterlösung&lt;/a&gt;“&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version vom 5. März 2013, 17:37 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>PaulG</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=19111&amp;oldid=prev</id>
		<title>Nighoo: verschob „Ckurs2010/TicTacToe/Musterlösung“ nach „Ckurs/TicTacToe/Musterlösung“</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=19111&amp;oldid=prev"/>
		<updated>2012-09-14T16:28:57Z</updated>

		<summary type="html">&lt;p&gt;verschob „&lt;a href=&quot;/Ckurs2010/TicTacToe/Musterl%C3%B6sung&quot; class=&quot;mw-redirect&quot; title=&quot;Ckurs2010/TicTacToe/Musterlösung&quot;&gt;Ckurs2010/TicTacToe/Musterlösung&lt;/a&gt;“ nach „&lt;a href=&quot;/Ckurs/TicTacToe/Musterl%C3%B6sung&quot; class=&quot;mw-redirect&quot; title=&quot;Ckurs/TicTacToe/Musterlösung&quot;&gt;Ckurs/TicTacToe/Musterlösung&lt;/a&gt;“&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Version vom 14. September 2012, 16:28 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Nighoo</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=15007&amp;oldid=prev</id>
		<title>Martin: überarbeitet</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=15007&amp;oldid=prev"/>
		<updated>2010-09-22T21:14:00Z</updated>

		<summary type="html">&lt;p&gt;überarbeitet&lt;/p&gt;
&lt;a href=&quot;https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;amp;diff=15007&amp;amp;oldid=14899&quot;&gt;Änderungen zeigen&lt;/a&gt;</summary>
		<author><name>Martin</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=14899&amp;oldid=prev</id>
		<title>89.247.231.122: Musterlösung zur TicTacToe aufgabe</title>
		<link rel="alternate" type="text/html" href="https://wiki.freitagsrunde.org/index.php?title=C-Kurs/TicTacToe/Musterl%C3%B6sung&amp;diff=14899&amp;oldid=prev"/>
		<updated>2010-09-16T09:18:20Z</updated>

		<summary type="html">&lt;p&gt;Musterlösung zur TicTacToe aufgabe&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Nicht so schöne aber hoffentlich funktionierende Musterlösung&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;SDL.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define EMPTY 0&lt;br /&gt;
#define PLAYER_A 1&lt;br /&gt;
#define PLAYER_B 2&lt;br /&gt;
#define ROWS 3&lt;br /&gt;
#define COLS 3&lt;br /&gt;
&lt;br /&gt;
int field[ROWS][COLS];&lt;br /&gt;
&lt;br /&gt;
void reset_board(){&lt;br /&gt;
	int i,j;&lt;br /&gt;
	i=j=0;&lt;br /&gt;
	for(i=0; i&amp;lt;ROWS; i++){&lt;br /&gt;
		for(j=0;j&amp;lt;COLS; j++)&lt;br /&gt;
			field[i][j] = EMPTY;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void draw_board(SDL_Surface *screen, SDL_Surface *background, SDL_Surface *circle, SDL_Surface *cross){&lt;br /&gt;
	&lt;br /&gt;
	// Hintergrund ins Fenster zeichnen&lt;br /&gt;
    SDL_BlitSurface(background, NULL, screen, NULL);&lt;br /&gt;
    SDL_Flip(screen);&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
	SDL_Rect offset;&lt;br /&gt;
	offset.x = 25;&lt;br /&gt;
	offset.y = 25;&lt;br /&gt;
&lt;br /&gt;
	int i,j;&lt;br /&gt;
	i=j=0;&lt;br /&gt;
	//iterate over the field&lt;br /&gt;
	for(i=0; i&amp;lt;ROWS; i++){&lt;br /&gt;
		for(j=0;j&amp;lt;COLS; j++){&lt;br /&gt;
			switch(field[i][j]){&lt;br /&gt;
				// empty nothing to do&lt;br /&gt;
				case EMPTY:&lt;br /&gt;
					break;&lt;br /&gt;
				// player A draaw circle&lt;br /&gt;
				case PLAYER_A:&lt;br /&gt;
					SDL_BlitSurface(circle, NULL, screen, &amp;amp;offset);&lt;br /&gt;
					SDL_Flip(screen);&lt;br /&gt;
					break;&lt;br /&gt;
				// player B draw cross&lt;br /&gt;
				case PLAYER_B:&lt;br /&gt;
					SDL_BlitSurface(cross, NULL, screen, &amp;amp;offset);&lt;br /&gt;
					SDL_Flip(screen);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			//next rectangle we want to draw&lt;br /&gt;
			offset.x += 100;&lt;br /&gt;
		}&lt;br /&gt;
		offset.y +=100;&lt;br /&gt;
		//reset x to start at top&lt;br /&gt;
		offset.x = 25;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Konvertiert Mauskoordinaten in Spielfeldkoordinaten&lt;br /&gt;
void convert_coords(int x, int y, int *row, int *column) {&lt;br /&gt;
    *row = (y-25) / 100;&lt;br /&gt;
    if (*row &amp;lt; 0) *row = 0;&lt;br /&gt;
    if (*row &amp;gt;= ROWS) *row = ROWS-1;&lt;br /&gt;
    *column = (x-25) / 100;&lt;br /&gt;
    if (*column &amp;lt; 0) *column = 0;&lt;br /&gt;
    if (*column &amp;gt;= COLS) *column = COLS-1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int check_win(int player){&lt;br /&gt;
	int i,j;&lt;br /&gt;
	i=j=0;&lt;br /&gt;
	&lt;br /&gt;
	int row_zero = (field[0][0] == player) &amp;amp;&amp;amp; (field[0][1] == player) &amp;amp;&amp;amp; (field[0][2] == player);&lt;br /&gt;
	int row_one =  (field[1][0] == player) &amp;amp;&amp;amp; (field[1][1] == player) &amp;amp;&amp;amp; (field[1][2] == player);&lt;br /&gt;
	int row_two =  (field[2][0] == player) &amp;amp;&amp;amp; (field[2][1] == player) &amp;amp;&amp;amp; (field[2][2] == player);&lt;br /&gt;
	&lt;br /&gt;
	int col_zero = (field[0][0] == player) &amp;amp;&amp;amp; (field[1][0] == player) &amp;amp;&amp;amp; (field[2][0] == player);&lt;br /&gt;
	int col_one =  (field[0][1] == player) &amp;amp;&amp;amp; (field[1][1] == player) &amp;amp;&amp;amp; (field[2][1] == player);&lt;br /&gt;
	int col_two =  (field[0][2] == player) &amp;amp;&amp;amp; (field[1][2] == player) &amp;amp;&amp;amp; (field[2][2] == player);&lt;br /&gt;
&lt;br /&gt;
	int diag_one = (field[0][0] == player) &amp;amp;&amp;amp; (field[1][1] == player) &amp;amp;&amp;amp; (field[2][2] == player);&lt;br /&gt;
	int diag_two = (field[0][2] == player) &amp;amp;&amp;amp; (field[1][1] == player) &amp;amp;&amp;amp; (field[2][0] == player);&lt;br /&gt;
&lt;br /&gt;
	return row_zero || row_one || row_two || col_zero || col_one || col_two || diag_one || diag_two;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int check_full(){&lt;br /&gt;
	int i,j;&lt;br /&gt;
	for(i=0; i&amp;lt;ROWS; i++){&lt;br /&gt;
		for(j=0;j&amp;lt;COLS; j++){&lt;br /&gt;
			if(field[i][j] == EMPTY)&lt;br /&gt;
				return 0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]) {&lt;br /&gt;
    // Grafiksubsystem der SDL initialisieren&lt;br /&gt;
    if (SDL_Init(SDL_INIT_VIDEO) &amp;lt; 0) {&lt;br /&gt;
        printf(&amp;quot;SDL konnte nicht initialisiert werden: %s\n&amp;quot;, SDL_GetError());&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // SDL bei Programmende automatisch schließen lassen&lt;br /&gt;
    atexit(SDL_Quit);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // Fenster für Grafikausgabe öffnen&lt;br /&gt;
    SDL_Surface *screen = SDL_SetVideoMode(350, 350, 32, SDL_SWSURFACE);&lt;br /&gt;
    if ( screen == NULL ) {&lt;br /&gt;
        printf(&amp;quot;Fehler beim Öffnen des Ausgabefensters: %s\n&amp;quot;, SDL_GetError());&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    SDL_WM_SetCaption(&amp;quot;Freitagsrunde presents: TicTacToe&amp;quot;, NULL);&lt;br /&gt;
&lt;br /&gt;
    // Hintergrundgrafik laden&lt;br /&gt;
    SDL_Surface *background = SDL_LoadBMP(&amp;quot;background.bmp&amp;quot;);&lt;br /&gt;
    if (background == NULL) {&lt;br /&gt;
        printf(&amp;quot;Fehler beim Laden von background.bmp: %s\n&amp;quot;, SDL_GetError());&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
	// Hintergrund ins Fenster zeichnen&lt;br /&gt;
    SDL_BlitSurface(background, NULL, screen, NULL);&lt;br /&gt;
    SDL_Flip(screen);&lt;br /&gt;
&lt;br /&gt;
	// Kreisgrafik laden&lt;br /&gt;
    SDL_Surface *circle = SDL_LoadBMP(&amp;quot;circle.bmp&amp;quot;);&lt;br /&gt;
    if (circle == NULL) {&lt;br /&gt;
        printf(&amp;quot;Fehler beim Laden von circle.bmp: %s\n&amp;quot;, SDL_GetError());&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    // grünen Hintergrund transparent machen&lt;br /&gt;
    SDL_SetColorKey(circle, SDL_SRCCOLORKEY, SDL_MapRGB(circle-&amp;gt;format, 0x00,0xFF,0x00));&lt;br /&gt;
	&lt;br /&gt;
	// Kreisgrafik laden&lt;br /&gt;
    SDL_Surface *cross = SDL_LoadBMP(&amp;quot;cross.bmp&amp;quot;);&lt;br /&gt;
    if (cross == NULL) {&lt;br /&gt;
        printf(&amp;quot;Fehler beim Laden von cross.bmp: %s\n&amp;quot;, SDL_GetError());&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    // grünen Hintergrund transparent machen&lt;br /&gt;
    SDL_SetColorKey(cross, SDL_SRCCOLORKEY, SDL_MapRGB(circle-&amp;gt;format, 0x00,0xFF,0x00));&lt;br /&gt;
    &lt;br /&gt;
	int quit = 0;&lt;br /&gt;
    SDL_Event event;&lt;br /&gt;
    SDL_Rect offset;&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
	int return_code=0;&lt;br /&gt;
	int row, column;&lt;br /&gt;
	row=column=0;&lt;br /&gt;
&lt;br /&gt;
	int current_player = 0;&lt;br /&gt;
	int reset = 0;&lt;br /&gt;
	int full = 0;&lt;br /&gt;
    &lt;br /&gt;
    // Event-Loop&lt;br /&gt;
    while (!quit) {&lt;br /&gt;
        // Event vorhanden?&lt;br /&gt;
        if (SDL_PollEvent(&amp;amp;event)) {&lt;br /&gt;
            switch (event.type) {&lt;br /&gt;
&lt;br /&gt;
                // Mousebutton wurde gedrückt&lt;br /&gt;
                case SDL_MOUSEBUTTONDOWN:&lt;br /&gt;
					current_player = 1 - current_player;&lt;br /&gt;
					convert_coords(event.button.x, event.button.y, &amp;amp;row, &amp;amp;column);&lt;br /&gt;
					//it is player A's turn&lt;br /&gt;
					if(current_player){&lt;br /&gt;
						//check if player is allowed to set this field&lt;br /&gt;
						if(field[row][column] != EMPTY){&lt;br /&gt;
							//not allowed his turn again&lt;br /&gt;
							current_player = 1-current_player;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
						//was allowed set the field&lt;br /&gt;
						field[row][column] = PLAYER_A;&lt;br /&gt;
		&lt;br /&gt;
						if(check_win(PLAYER_A)){&lt;br /&gt;
							//Set a Message&lt;br /&gt;
							SDL_WM_SetCaption(&amp;quot;Spieler 1 hat gewonnen&amp;quot;, NULL);&lt;br /&gt;
							reset = 1;&lt;br /&gt;
						}&lt;br /&gt;
					//it is player B's turn&lt;br /&gt;
					} else {&lt;br /&gt;
						//check if player is allowed to set this field&lt;br /&gt;
						if(field[row][column] != EMPTY){&lt;br /&gt;
							//not allowed his turn again&lt;br /&gt;
							current_player = 1-current_player;&lt;br /&gt;
							break;&lt;br /&gt;
						}&lt;br /&gt;
						//was allowed set the field&lt;br /&gt;
						field[row][column] = PLAYER_B;&lt;br /&gt;
						if(check_win(PLAYER_B)){&lt;br /&gt;
							//Set a Message&lt;br /&gt;
							SDL_WM_SetCaption(&amp;quot;Spieler 2 hat gewonnen&amp;quot;, NULL);&lt;br /&gt;
							reset = 1;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
					&lt;br /&gt;
					full = check_full();&lt;br /&gt;
					if(full){&lt;br /&gt;
						// no empty fields and no winner&lt;br /&gt;
						SDL_WM_SetCaption(&amp;quot;Unentscheiden&amp;quot;, NULL);&lt;br /&gt;
					}&lt;br /&gt;
					reset = reset || full;&lt;br /&gt;
					//winner or field is full&lt;br /&gt;
					if(reset){&lt;br /&gt;
						reset_board();&lt;br /&gt;
						// Hintergrund ins Fenster zeichnen&lt;br /&gt;
						SDL_BlitSurface(background, NULL, screen, NULL);&lt;br /&gt;
						SDL_Flip(screen);&lt;br /&gt;
						reset = 0;&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					//draw the board&lt;br /&gt;
					draw_board(screen, background, circle, cross);&lt;br /&gt;
&lt;br /&gt;
                    break;&lt;br /&gt;
&lt;br /&gt;
                case SDL_QUIT:&lt;br /&gt;
                    quit = 1;&lt;br /&gt;
                    break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Fenster schließen&lt;br /&gt;
    SDL_FreeSurface(screen);&lt;br /&gt;
    &lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>89.247.231.122</name></author>
		
	</entry>
</feed>