「トップページ」の編集履歴(バックアップ)一覧はこちら

トップページ」(2007/07/17 (火) 12:11:39) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

*今日の管理人(4月13日) 少し入院してきます。 *Cross Load Street=十字路街 十字路街の掲示板はバーチャルタウン「十字路街」にある連絡及び記録などに使われます。 主に連絡や広告のためのWikiです。誰でも作成することができるように準備しています。 十字路街の詳しい概要については[[十字路街とは]]を参照してください。 みんなでつなごうリンクの輪。みんなで目指そう便利なWikiです。 ---- -[[3EI通信]] オマケとして私が配布している「3EI通信」の過去ログが公開してあります。 -[[4EI通信]] 4年生に配布中の4EI通信です。一年間続けられるといいと思います。
*今日の管理人(4月13日) 少し入院してきます。 *Cross Load Street=十字路街 十字路街の掲示板はバーチャルタウン「十字路街」にある連絡及び記録などに使われます。 主に連絡や広告のためのWikiです。誰でも作成することができるように準備しています。 十字路街の詳しい概要については[[十字路街とは]]を参照してください。 みんなでつなごうリンクの輪。みんなで目指そう便利なWikiです。 ---- -[[3EI通信]] オマケとして私が配布している「3EI通信」の過去ログが公開してあります。 -[[4EI通信]] 4年生に配布中の4EI通信です。一年間続けられるといいと思います。 #include <stdio.h> #include <time.h> #include <GrWin.h> #include <conio.h> #include <stdlib.h> #define M 7 #define N 7 int stackp = 0; int stack[10][2]; void init( int[M][N] ); void makemap ( int[M][N] ); void makemap2( int[M][N] ); void makemap22( int[M][N] , int , int , int , int ); void output ( int[M][N] ); void output2( int[M][N] ); void output3( int[M][N] ); void main(){ int map[M][N]; srand((unsigned) time(NULL)); init( map ); makemap2( map ); output( map ); } //迷路作成-棒倒し法- void makemap( int map[M][N] ){ int i , j , vec , vx = 0 , vy = 0; //支柱 for( i = 2 ; i < M - 1 ; i += 2 ) for( j = 2 ; j < N - 1 ; j += 2 ) map[i][j] = 1; //倒す for( i = 2 ; i < M - 1 ; i += 2 ){ for( j = 2 ; j < N - 1 ; j += 2 ){ if( i == 2 ) vec = ( rand() % 12 ) / 3 + 1; else vec = ( rand() % 9 ) / 3 + 1; if( vec == 1 ){ vx = 0 ; vy = -1; } if( vec == 2 ){ vx = 1 ; vy = 0; } if( vec == 3 ){ vx = 0 ; vy = 1; } if( vec == 4 ){ vx = -1 ; vy = 0; } //重なっても無視 map[ i + vy ][ j + vx ] = 1; } } } //迷路作成-穴掘り法- void makemap2( int map[M][N] ){ int i , j , x , y , vec; //初期(すべて壁) for( i = 0 ; i < M ; i++ ) for( j = 0 ; j < N ; j++ ) map[i][j] = 1; x = rand() % M + 1; y = rand() % N + 1; vec = rand() % 4 + 1; map[x][y] = 0; stack[stackp++][0] = x; stack[stackp-1][0] = y; if( vec == 1 ) makemap22( map , x , y , -1 , 0); if( vec == 2 ) makemap22( map , x , y , 0 , 1); if( vec == 3 ) makemap22( map , x , y , 1 , 0); if( vec == 4 ) makemap22( map , x , y , 0 , -1); } void makemap22( int map[M][N] , int x , int y , int vx , int vy ){ int nx , ny , vec; //以下探索 nx = x + vx * 2; ny = y + vy * 2; if( nx >= N || nx < 0 || ny >= M || ny < 0 ) return; if( map[ny][nx] == 0 ) return; map[ny][nx] = 0; map[y + vy][x + vx] = 0; vec = rand() % 4 + 1; } //初期化 void init( int map[M][N] ){ int i , j; //初期化 for( i = 0 ; i < M ; i++ ) for( j = 0 ; j < N ; j++ ) map[i][j] = 0; //壁 for( i = 0 ; i < N ; i++ ) map[0][i] = map[M-1][i] = 1; for( i = 0 ; i < M ; i++ ) map[i][0] = map[i][N-1] = 1; map[1][0] = 2; //スタート map[M-2][N-1] = 3; //ゴール } //数字出力 void output( int map[M][N] ){ int i , j; for( i = 0 ; i < M ; i++ ){ for( j = 0 ; j < N ; j++ ){ printf("%2d",map[i][j]); } printf("\n"); } } //コード出力 void output2( int map[M][N] ){ int i , j; for( i = 0 ; i < M ; i++ ){ for( j = 0 ; j < N ; j++ ){ switch( map[i][j] ){ case 1: printf("#"); break; case 2: printf("S"); break; case 3: printf("G"); break; case 0: printf(" "); } } printf("\n"); } } //GrWin出力 void output3( int map[M][N] ){ int width = 640, height = 480; /* ウィンドウサイズ640×400 */ int i , j , x0 = 20 , y0 = height - 20 , color = 19 ; int xsize = width / ( M + 1 ) , ysize = height / ( N + 1 ) , x , y; GWopen(0); /* ウィンドウのオープン */ GWsize(-5, &width, &height); /* ウィンドウサイズ設定 */ GWsize(-3, NULL, NULL); /* フレーム(枠)サイズ設定 */ GWvport(0.0, 0.0, (float)width / (float)height, 1.0); /* ビューポート設定 */ GWindow(0.0, 0.0, (float)width - 1.0, (float)height - 1.0); //処理 for( i = 0 ; i < M ; i++ ){ for( j = 0 ; j < N ; j++ ){ if( map[i][j] == 0 ) color = 19; //白 if( map[i][j] == 1 ) color = 0; //黒 if( map[i][j] == 2 ) color = 13; //赤 if( map[i][j] == 3 ) color = 16; //青 x = x0 + j * xsize; y = y0 - i * ysize; GWsrect( x , y , x + xsize , y - ysize , color ); } } getch(); GWquit(); /* 終了処理 */ /* ↑ワールド座標系設定 */ return; }

表示オプション

横に並べて表示:
変化行の前後のみ表示: