C言語をもっと!

はやくも新成人が大暴れのニュースが飛び込んできていますね。学級崩壊の問題が顕著になってきた世代でしたから、残念ながら「やっぱりな」と思ってしまいました。

<新成人>飲酒し傷害、上半身裸で式乱入…佐賀県内荒れる

佐賀県警唐津署は11日未明、タクシー運転手を押し倒して軽傷を負わせたとして唐津市旭が丘の派遣作業員の少年(19)を傷害容疑で現行犯逮捕した。

少年は11日午前1時10分ごろ、自宅近くの市道で、タクシーで帰宅中に運転の仕方や料金の支払いを巡って運転手の男性(55)と口論となり、男性を車から引きずり出して、押し倒して右手のひらに擦り傷を負わせた疑い。同署によると、少年は10日に同市であった成人式に参加し、その後の同窓会などで酒を飲み、酔っていたという。

佐賀市民会館で11日開かれた同市成人式では、式典開催中に新成人とみられる男が上半身裸で乱入、スタッフに制止された。また市長の式辞の最中に、叫び声が上がったりステージ上に男が勝手に上った【関谷俊介】

1月11日19時59分配信 毎日新聞

それはさておき、今年の目標として、

  • C言語をもっと使えるようにすることと
  • C++を覚えること

があります。ですが、100行や200行程度のプログラムを書いているだけでは、「書く力」をつけるのは難しい気がしてきました。行の桁数を増やすくらいに長いプログラムを書いてみたいところなんですが、何千行もするプログラムっていままで必要になりませんでした。

ゲームを作る段階にはなったのかなって思います。

ゲームプログラミングの初歩として参考になるようなサイトを探したら、いくつかめぼしいものが見つかりました.

1.[これからRPGを創ってみたい方への参考資料]
CUIベースでRPGを作るために参考になる……っぽい話がまとめられています。CとC++を混ぜた感じの使い方をしているのは人によって好き嫌いが出るのかも……ですが、それでも2万行を「書いた」という事実に驚嘆し、評価せざるを得ないところです。「10分動画で分かるRPG開発講座」なるものもありますが、ここのソースコードがちゃんとコンパイルできなかったので、自分で使うには適当に直す必要がありました。
2.[レポートコンテスト:静岡大学]
CUIで簡易RPGを作るというテーマ。最優秀賞のグループのレポートは本当に素晴らしいものです。私もかなり刺激されました。
3.[ゲーム作りで学ぶ!実践的C言語プログラミング]
これはRPGではないです。ノベルゲームを作ることに重点が置かれています。DXライブラリをつかったグラフィック処理も含んでいるので、Windowsプログラミングをするなら参考にしたいものです。

以下に1.で紹介した「10分で〜」のソースコードと、その解説動画があります。ニコニコ動画のアカウントを持っている人はちょっと見てみるといいでしょう。

//
// 2007/3/15
// Lesson1: マップの作成と描画、キー入力とキャラの移動
// Movie: 	http://fatalita.sakura.ne.jp/TubeRPG/
// HP: 		http://fatalita.sakura.ne.jp/
//
#include <stdio.h>
#include <stdlib.h>

#define KEY_UP    'u'
#define KEY_DOWN  'd'
#define KEY_RIGHT 'r'
#define KEY_LEFT  'l'

#define MAP_SIZE_Y 10
#define MAP_SIZE_X 10

int x = 3, y = 4;
int map[100][100] = {
	{1,1,1,1,1,1,1},	
	{1,0,0,3,0,0,1},	
	{1,0,0,0,0,0,1},	
	{1,0,2,0,2,0,1},	
	{1,0,0,0,0,0,1},		
	{1,1,1,1,1,1,1},	
} ;

void DrawMap(){
	int i,j;
	
	for ( j = 0; j < MAP_SIZE_Y; j++ )
	{
		for ( i = 0; i < MAP_SIZE_X; i++ )
		{
			if ( j == y && i == x ){
				printf("勇");	
			} else {
				switch ( map[j][i] ){
				default:printf("  "); break;
				case 1: printf("■"); break;
				case 2:	printf("兵"); break;
				case 3: printf("王"); break;
				}
			}
		}
		printf("\n");
	}
}

void GetKey(){
	switch ( getchar() ){
	case KEY_UP:	y--; break; //UP
	case KEY_DOWN:	y++; break; //DOWN
	case KEY_LEFT:	x--; break; //LEFT
	case KEY_RIGHT: x++; break;	//RIGHT
	}
}

int main(void){
	while (1)
	{
		system("clear");
		puts("上:u, 右:r, 下:d, 左:l");
		DrawMap();
		GetKey();
	}
	return 0;
}

さしあたって、2.で紹介したレポートコンテストに取り組んでみたいと考えています。進行状況などはたまにブログで書いていけるようにしたいと思います。

悠長にプログラムを書いている場合でもなくて、冬学期の試験が迫ってきています……そんなにヤバいとは思っていないですが、ちゃんとそろそろ準備しないといけなくなってきましたね……


コメント

コメントの投稿















管理者にだけ表示を許可

トラックバック

この記事のトラックバックURI
http://wavelet.blog58.fc2.com/tb.php/205-3772777a