投稿作品(ソース公開)

返信
どぶろく
記事: 75
登録日時: 11年前

投稿作品(ソース公開)

#1

投稿記事 by どぶろく » 6年前

「C言語何でも質問サイト」には「作品お披露目掲示板」があるので、このトピックは必要ないとも思ったが、
「ソースで公開する」ということで意味があるかなっと。
作品はなるべく短い方がよく、DXライブラリを使ったゲームや、コンソールアプリや、
汎用的に使えるアルゴリズムや、Win32APIや、標準関数を使った便利なものなども公開してほしいですね。
トンカツか?中濃か?高度な味覚アプリとしてブルドックソースをアップするというのもいいでしょう。

どぶろく
記事: 75
登録日時: 11年前

Re: 投稿作品(ソース公開)

#2

投稿記事 by どぶろく » 6年前

直線アルゴリズム(ブレゼンハム?)
sgn関数が(あるのか?ないのか?)
なにはともあれ直線が引けたことが嬉しい。
シューティングで弾が早い場合の当たり判定に使える?
今作っているドット絵エディタにも使えるかも!

コード:

#include "DxLib.h"

int sgn(int a)
{
	if(a<0){ return -1; }
	if(a>0){ return  1; }
	return 0;
}

void line(int x1, int y1, int x2, int y2, UINT color)
{
	int t, ax, ay, sx, sy;
	
	ax = abs( x2 - x1 );
	ay = abs( y2 - y1 );
	sx = sgn( x2 - x1 );
	sy = sgn( y2 - y1 );
	
	if( ax >= ay ){
		for( t = ax/2 ; x1 != x2 ; x1 += sx){
			DrawPixel(x1, y1, color);
			if(( t -= ay) <= 0 ){
				t += ax;
				y1 += sy;
			}
		}
	}else {
		for( t = ay/2 ; y1 != y2 ; y1 += sy){
			DrawPixel(x1, y1, color);
			if(( t -= ax) <= 0 ){
				t += ay;
				x1 += sx;
			}
		}
	}
	DrawPixel(x1, y1, color);
}

//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	ChangeWindowMode(TRUE);
	if(DxLib_Init()==-1) {return -1;}
	
	line(20, 20, 430, 300, GetColor(255, 255, 255));
	
	WaitKey();
	DxLib_End() ;

	return 0;
}

どぶろく
記事: 75
登録日時: 11年前

Re: 投稿作品(ソース公開)

#3

投稿記事 by どぶろく » 6年前

円アルゴリズム(ブレゼンハム?)
最初の関数は円が描けましぇ~んでした。
どこが間違ってるのか分かりまちぇ~ん。
ネットで調べたら似たようなのがありました。
こちらはちゃんと描けます。

コード:

#include "DxLib.h"
/*	
//-----------------------------------------------------------------------------
// この関数は、どこかが間違っていて描けないよぉ。(>0<)
//-----------------------------------------------------------------------------
void circle2(int x0, int y0, int r)
{
	int x, y, d;

	x = r;
	y = 0;
	d = x;
	
	while( x >= y ){
		DrawPixel(x0, y0);
		DrawPixel(x0, y0-y);
		DrawPixel(x0-x, y0);
		DrawPixel(x0-x, y0-y);
		
		DrawPixel(x0, y0);
		DrawPixel(x0, y0-x);
		DrawPixel(x0-y, y0);
		DrawPixel(x0-y, y0-x);
		
		if( (d -= 2*(y)) < 0 ){
			d = 2*(x--) - 2 ;
		}
	}
}
*/

//-----------------------------------------------------------------------------
// これはちゃんと描ける
//-----------------------------------------------------------------------------
void circle( int x0, int y0, int r, UINT color )
{
	int x = r;
	int y = 0;
	int F = -2 * r + 3;

	while ( x >= y ) {
		DrawPixel( x0 + x, y0 + y, color );
		DrawPixel( x0 - x, y0 + y, color );
		DrawPixel( x0 + x, y0 - y, color );
		DrawPixel( x0 - x, y0 - y, color );
		DrawPixel( x0 + y, y0 + x, color );
		DrawPixel( x0 - y, y0 + x, color );
		DrawPixel( x0 + y, y0 - x, color );
		DrawPixel( x0 - y, y0 - x, color );
		if ( F >= 0 ) {
			x--;
			F -= 4 * x;
		}
		y++;
		F += 4 * y + 2;
	}
}


//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	
	ChangeWindowMode(TRUE);
	if(DxLib_Init()==-1) {return -1;}
	SetDrawScreen( DX_SCREEN_BACK ); 
	
	circle(100, 100, 50, GetColor(255, 255, 255));

	ScreenFlip();
	WaitKey();
	DxLib_End() ;

	return 0;
}

返信

“52歳からはじめるC言語” へ戻る