「C言語何でも質問サイト」には「作品お披露目掲示板」があるので、このトピックは必要ないとも思ったが、
「ソースで公開する」ということで意味があるかなっと。
作品はなるべく短い方がよく、DXライブラリを使ったゲームや、コンソールアプリや、
汎用的に使えるアルゴリズムや、Win32APIや、標準関数を使った便利なものなども公開してほしいですね。
トンカツか?中濃か?高度な味覚アプリとしてブルドックソースをアップするというのもいいでしょう。
投稿作品(ソース公開)
Re: 投稿作品(ソース公開)
直線アルゴリズム(ブレゼンハム?)
sgn関数が(あるのか?ないのか?)
なにはともあれ直線が引けたことが嬉しい。
シューティングで弾が早い場合の当たり判定に使える?
今作っているドット絵エディタにも使えるかも!
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;
}
Re: 投稿作品(ソース公開)
円アルゴリズム(ブレゼンハム?)
最初の関数は円が描けましぇ~んでした。
どこが間違ってるのか分かりまちぇ~ん。
ネットで調べたら似たようなのがありました。
こちらはちゃんと描けます。
最初の関数は円が描けましぇ~んでした。
どこが間違ってるのか分かりまちぇ~ん。
ネットで調べたら似たようなのがありました。
こちらはちゃんと描けます。
#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;
}