おい、そこのお前! どうか私のソースを見て下さい
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG言語フリー
0002デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNG0005言語はC
NGNG#include <stdio.h>
#include <math.h>
double l;main(_,o,O){return putchar((_--+22&&_+44&&main(_,-43,_),_&&o)?(main(-43,++o,O),((l=(o+21)/sqrt(3-O*22-O*O),l*l<4&&(fabs(((time(0)-607728)%2551443)/405859.-4.7+acos(l/2))<1.57))[" #"])):10);}
0006第2弾
NGNGint O,o,i;char*I="";main(l){O&=l&1?*I:~*I,*I++||(l=2*getchar(),i+=O>8
?o:O?0:o+1,o=O>9,O=-1,I="t8B~pq`",l>0)?main(l/2):printf("%d\n",--i);}
0007デフォルトの名無しさん
NGNGトリッキーなコードスレにでも逝け
0008デフォルトの名無しさん
NGNG難解Cプログラミングコンテストのコピペ
0009デフォルトの名無しさん
NGNGint GetLineNumber(const char *FileName)
{
ifstream fin(FileName);
char chTemp[255];
int nLine = 0;
while (!fin.eof()) {
fin.getline(chTemp, 255);
nLine++;
}
return nLine;
}
0010デフォルトの名無しさん
NGNGんじゃ漏れも
#include<stdio.h>
unsigned flines( const char* file ){
FILE* fp:
unsigned lines = 0;
int temp;
if( fp = fopen( file, "r" ) ){
++lines;
while( ( temp = fgetc( fp ) ) != EOF )
if( temp == '\n' ) lines++;
fclose(fp);
}
return lines;
}
0012ruby!
NGNGputs("hello,world");
0014デフォルトの名無しさん
NGNG(let ((char (read-char port)))
(cond ((eof-object? char) 0)
((char=? char #\newline)
(+ 1 (count-lines port)))
(else
(count-lines port)))))
(call-with-input-file ".emacs.el" count-lines)
=> 95
00159
NGNG// 文字列 Text の中に Key が存在するか確認する.
// 存在する場合は 1 を,存在しない場合は 0 を返す.
bool PatternMatching(const char *Text, const char *Key)
{
char *pText;
int nTextChar = strlen(Text);
int nKeyChar = strlen(Key);
for (pText = Text; pText <= Text + nTextChar - nKeyChar; pText++) {
if (strncmp(pText, Key, nKeyChar) == 0) {
return 1;
}
}
return 0;
}
0016デフォルトの名無しさん
NGNG>(+ 1 (count-lines port)))
末尾再帰になってないよ
0017デフォルトの名無しさん
NGNGint main(int argc,char *argv[])
{
int a=argc;
if((argv++,argc) > 1)
while(argc-- != 0)
puts(*argv++);
printf("引数 %dコ\n",--a);
getchar();
return 0;
}
001814
NGNG#include <string.h>
typedef int boolean;
#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif /* !TRUE */
boolean
string_match (string, pattern)
const char *string;
const char *pattern;
{
if (*string == '\0')
return FALSE;
else if (strlen (string) < strlen (pattern))
return FALSE;
else if (!strncmp (string, pattern, strlen (pattern)))
return TRUE;
else
return string_match (string + 1, pattern);
}
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNGqsort [] = []
qsort (x:xs) = qsort [a|a<-xs,a<=x] ++ [x] ++ qsort [a|a<-xs,a>x]
0023デフォルトの名無しさん
NGNGdef flines(filename):
def count(list):
if (list == []):
return 0
else:
return 1 + count(list[1:])
return count(open(filename, "r").readlines()) - 1
0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNGforeach (1 .. 1000) {
print "1000ゲット!";
}
exit;
0027デフォルトの名無しさん
NGNGimport sys
def print_args():
arg = sys.argv[1:]
count_args = 1
while(arg != []):
print str(count_args) + "番目:" + arg[0]
arg = arg[1:]
count_args += 1
print "引数は全部で", str(count_args), "だったお。"
>>24
pyです。
0028デフォルトの名無しさん
NGNG002927
NGNG0030デフォルトの名無しさん
NGNGfunc Fib (n) -> Nat means
:: PRE_FF:def 1
ex fib being Function of NAT, [:NAT, NAT:] st
it = (fib.n)`1 & fib.0 = [0,1] &
for n being Nat, x being Element of [: NAT, NAT :] st x = fib.n
holds fib.(n+1) = [ x`2, x`1 + x`2 ];
end;
0031デフォルトの名無しさん
NGNG>>22 は Haskell
0032デフォルトの名無しさん
NGNGbool PatternMatching(const char* text, const char* key)
{
return strstr(text, key) != NULL;
}
0033デフォルトの名無しさん
NGNG0034デフォルトの名無しさん
NGNG用意されてる関数は使わず、できるだけ自前のロジックで勝負する方向で
やんないと、小細工大会みたいになってつまんなくなるです。
0035デフォルトの名無しさん
NGNGXOR B , A
XOR A , B
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNGTALK "iqteyosi"
0039デフォルトの名無しさん
NGNGunsigned int Cond = 1; //初期状態
while(Cond != 0){
Cond = Ai_start();
Cond += Ai();
Cond += Ai_end();
}
0040デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG何に対する愛を?
0044ヒッキー@プログラミング ◆hky/PGis
NGNGLOVE >> SEX
さらにシフト演算
0045デフォルトの名無しさん
NGNG0046uhi
NGNGIf Right$("土くれ",2) = Right$("ささくれ",2) Then Msgbox("同一です")
00471
NGNG0048デフォルトの名無しさん
NGNG// 文字列 Text の中に Key が存在するか確認する.
// 存在する場合は 1 を,存在しない場合は 0 を返す.
bool PatternMatching(const char *Text, const char *Key)
{
return( strstr(Text, Key) != NULL ? 1 : 0);
}
0049デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG大文字小文字はどっちでもいいんじゃない?
0052デフォルトの名無しさん
NGNGbool match_pattern(constt char* text, const char* key)
0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNGJava 小文字から。
両方とも基本的に関数名に"_"を使わない。
0055デフォルトの名無しさん
NGNG小文字しか使わない人っって argument_number なの? arg_num?
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGhttp://jp.y42.briefcase.yahoo.co.jp/bc/sai_015/lst?.dir=/dir&.err=&.last=1&.ndnm=piro.bz2&.view=l
0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNGnumber_of_arguments だろ ? argument_number じゃ、引数の番号だよ。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGって書いておけば?
0063デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNG不覚にもワラタ
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNGint nNumberOfArguments; // MS
int numberOfArguments; // java,c#
int timpo; // 64
0068デフォルトの名無しさん
NGNGwhile("回れ")
でおながいします。
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNG文字列が0番に割り当てられることは無いの?
0072デフォルトの名無しさん
NGNG俺は68じゃないけど、ポインタなんだからNULLが来るわきゃない。
0073翔犬朗
NGNG#include "hmm.as"
DIINIT
if stat=0 :end
; HSPウィンドウ/バッファID
#define MAIN_SCR_ID0
#define CHIP_BUF_ID2
; サーフェイスID
#define PRIMARY_SUR_ID0
#define CHIP_SUR_ID1
; フリップ時のウェイト
#define FLIP_WAIT1092267;1/60 (65536*1000/60=1092266.666)
;#define FLIP_WAIT0;全力疾走
#define CHR_MAX5000
; 補助モジュールの読み込み
#include "m_AMspaceFillStr.as"
; プラグイン定義ファイルの読み込み
#include "AMddrawD.as"
; プラグイン補助モジュールの読み込み
#include "m_AMddrawDSupport.as"
#define m_ec m_AMddrawErrorCheck
;#define m_ec pos
;-----------------------
; プラグインのバージョンチェックと動作モード選択
dim para, 7
dup sx, para.0
dup sy, para.1
dup bpp, para.2
dup windowMode, para.3
dup direct3DMode, para.4
dup fpsMode, para.5
dup tripleBuffer, para.6
sx = 512; スクリーンサイズX
sy = 384; スクリーンサイズY
bpp = 16; ビット深度
windowMode =AMDDRAW_WINDOWMODE_FULLSCREEN; AMDDRAW_WINDOWMODE_WINDOW_WITH_COLOR_CHANGE; ウィンドウモード
direct3DMode = AMDDRAW_SELECTD3DMODE_AUTO; Direct3D使用モード
fpsMode = AMDDRAW_FPS_DRAW | AMDDRAW_FPS_EDGE_DRAW; フレームレート表示モード
tripleBuffer = 0; トリプルバッファ
0074翔犬朗
NGNG; パラメータチェック
; [スクリプト内容がsx,syやbppに依存する場合は、ここでチェックする]
;-----------------------
; AMddraw.hpiとプライマリサーフェイスの初期化
m_AMddrawInitialize para, APL_TITLE, MAIN_SCR_ID, 2, CHR_MAX : m_ec
onexit *exit
;-----------------------
; 画像の用意
buffer CHIP_BUF_ID, 512, 512,
picload "n.bmp",1,0,0
picload "l1.bmp",1,65,0
picload "r1.bmp",1,129,0
picload "vn.bmp",1,193,0
picload "vl1.bmp",1,257,0
picload "vr1.bmp",1,321,0
picload "tama1.bmp",1,385,0
;-----------------------
; オフスクリーンサーフェイスの用意
memoryType = AMDDRAW_SURFACE_FLAG_AUTO_MEMORY_USE : m_ec
memoryType = memoryType | AMDDRAW_SURFACE_FLAG_TEXTURE : m_ec
AMdCreateOffscreenSurface CHIP_SUR_ID, 512, 512, memoryType : m_ec
;-----------------------
; 画像の転送
AMdHSPToSurface 512, 512 : m_ec
0075翔犬朗
NGNG; チップの登録
AMdCreateChip 0, 64, 64 : m_ec
dim hitArea, 4 : m_ec
hitArea = 0, 0, 64, 64 : m_ec
AMdSetChipHitArea hitArea, 0 : m_ec
AMdSetPosition 65,0
AMdCreateChip 1, 64, 64 : m_ec
AMdSetChipHitArea hitArea, 1
AMdSetPosition 129,0
AMdCreateChip 2, 64, 64 : m_ec
AMdSetChipHitArea hitArea, 2
AMdSetPosition 193,0
AMdCreateChip 3, 64, 64 : m_ec
AMdSetChipHitArea hitArea, 3
AMdSetPosition 257,0
AMdCreateChip 4, 64, 64 : m_ec
AMdSetChipHitArea hitArea, 4
AMdSetPosition 321,0
AMdCreateChip 5, 64, 64 : m_ec
AMdSetChipHitArea hitArea, 5
AMdSetPosition 385,0
AMdCreateChip 6, 16, 16 : m_ec
dim hitArea2, 4 : m_ec
hitArea2 = 4, 0, 11, 12 : m_ec
AMdSetChipHitArea hitArea2, 6
;-----------------------
; サーフェイスの準備
AMdSelectSurface PRIMARY_SUR_ID : m_ec
black = 0 : AMdGetColorCode black, 0, 0, 0 : m_ec
blue = 0 : AMdGetColorCode blue, 0, 0, 255 : m_ec
white = 0 : AMdGetColorCode white, 255, 255, 255 : m_ec
0076翔犬朗
NGNGAMdSelectSurface CHIP_SUR_ID : m_ec
AMdSetTransparentColor AMDDRAW_TRANSCOLOR_SOURCE , white, white : m_ec
AMdSelectSurface PRIMARY_SUR_ID : m_ec
AMdSetTransparentColor AMDDRAW_TRANSCOLOR_DEST , white, white : m_ec
AMdClearSurface black, AMDDRAW_CLEAR_FLAG_CLEAR : m_ec
; アルファブレンド無効
AMdSetRenderState D3DRENDERSTATE_ALPHABLENDENABLE, 0 : m_ec
AMdSetRenderColor 255, 255, 255, 0 : m_ec
;-----------------------
; キャラクタ使用の準備
dim c_f, CHR_MAX : AMdSetCharacterVariable c_f, 0 : m_ec ; キャラクタフラグ
dim c_x, CHR_MAX : AMdSetCharacterVariable c_x, 1 : m_ec ; キャラクタx座標
dim c_y, CHR_MAX : AMdSetCharacterVariable c_y, 2 : m_ec ; キャラクタy座標
dim c_x0, CHR_MAX : AMdSetCharacterVariable c_x0, 3 : m_ec ; 有効範囲left
dim c_y0, CHR_MAX : AMdSetCharacterVariable c_y0, 4 : m_ec ; 有効範囲top
dim c_x1, CHR_MAX : AMdSetCharacterVariable c_x1, 5 : m_ec ; 有効範囲right
dim c_y1, CHR_MAX : AMdSetCharacterVariable c_y1, 6 : m_ec ; 有効範囲bottom
dim c_c, CHR_MAX : AMdSetCharacterVariable c_c, 7 : m_ec ; チップNo.
dim c_m, CHR_MAX : AMdSetCharacterVariable c_m, 8 : m_ec ; 移動フラグ
dim c_ap, CHR_MAX : AMdSetCharacterVariable c_ap, 9 : m_ec ; 外見フラグ
dim c_bl, CHR_MAX : AMdSetCharacterVariable c_bl, 10 : m_ec ; 点滅カウンタ
dim c_dc, CHR_MAX : AMdSetCharacterVariable c_dc, 11 : m_ec ; 自動消滅カウンタ
dim c_vx, CHR_MAX : AMdSetCharacterVariable c_vx, 12 : m_ec ; 平行移動速度x
dim c_vy, CHR_MAX : AMdSetCharacterVariable c_vy, 13 : m_ec ; 平行移動速度y
dim c_ax, CHR_MAX : AMdSetCharacterVariable c_ax, 14 : m_ec ; 平行移動加速度x
dim c_ay, CHR_MAX : AMdSetCharacterVariable c_ay, 15 : m_ec ; 平行移動加速度y
dim c_rpv, CHR_MAX : AMdSetCharacterVariable c_rpv, 16 : m_ec ; 回転移動速度
dim c_rt, CHR_MAX : AMdSetCharacterVariable c_rt, 17 : m_ec ; 角度
dim c_rv, CHR_MAX : AMdSetCharacterVariable c_rv, 18 : m_ec ; 角速度
dim c_ra, CHR_MAX : AMdSetCharacterVariable c_ra, 19 : m_ec ; 角加速度
dim c_ex, CHR_MAX : AMdSetCharacterVariable c_ex, 20 : m_ec ; 拡大縮小率x 256で1倍
dim c_ey, CHR_MAX : AMdSetCharacterVariable c_ey, 21 : m_ec ; 拡大縮小率y 256で1倍
dim c_aim, CHR_MAX : AMdSetCharacterVariable c_aim, 22 : m_ec ; 追尾移動キャラクタNo.
dim c_aimv,CHR_MAX : AMdSetCharacterVariable c_aimv,23 : m_ec ; 追尾速度
dim c_al, CHR_MAX : AMdSetCharacterVariable c_al, 24 : m_ec ; アルファ値
dim c_an, CHR_MAX : AMdSetCharacterVariable c_an, 25 : m_ec ; アニメーションパターンNo.
dim c_rta, CHR_MAX : AMdSetCharacterVariable c_rta, 26 : m_ec ; 外見回転角度
dim c_rcR, CHR_MAX : AMdSetCharacterVariable c_rcR, 27 : m_ec ; RenderColor R
dim c_rcG, CHR_MAX : AMdSetCharacterVariable c_rcG, 28 : m_ec ; RenderColor G
dim c_rcB, CHR_MAX : AMdSetCharacterVariable c_rcB, 29 : m_ec ; RenderColor B
dim c_rcA, CHR_MAX : AMdSetCharacterVariable c_rcA, 30 : m_ec ; RenderColor AlphaEnable
dim c_rst1,CHR_MAX : AMdSetCharacterVariable c_rst1,31 : m_ec ; RenderState type (1)
dim c_rsv1,CHR_MAX : AMdSetCharacterVariable c_rsv1,32 : m_ec ; RenderState value (1)
dim c_rst2,CHR_MAX : AMdSetCharacterVariable c_rst2,33 : m_ec ; RenderState type (2)
dim c_rsv2,CHR_MAX : AMdSetCharacterVariable c_rsv2,34 : m_ec ; RenderState value (2)
dim c_rspR,CHR_MAX : AMdSetCharacterVariable c_rsv2,35 : m_ec ; RenderSpecular R
dim c_rspG,CHR_MAX : AMdSetCharacterVariable c_rsv2,36 : m_ec ; RenderSpecular G
dim c_rspB,CHR_MAX : AMdSetCharacterVariable c_rsv2,37 : m_ec ; RenderSpecular B
dim c_rspc,CHR_MAX : AMdSetCharacterVariable c_rsv2,38 : m_ec ; RenderSpecular
0077翔犬朗
NGNG; 描画の準備
AMdCreateCharacter 0, 0, 200, 200
c_ap.0 =AMDDRAW_CHR_APPARENT_SHOW : m_ec
c_ex.0 = 255
c_ey.0 = 255
dup nx, c_x.0
dup ny, c_y.0
AMdCreateCharacter 1, 3, 100, 100
c_ap.1 =AMDDRAW_CHR_APPARENT_SHOW
c_ex.1 = 255
c_ey.1 = 255
dup vx, c_x.1
dup vy, c_y.1
;-----------------------
; メインループ
c = blue
*mainLoop
c = blue
c_c.0=0
c_c.1=3
stick i, 15 : if i & 128 : goto *exit
DIGETJOYSTATE joy ,0
if joy&64 {
if joy&4 : vx=vx-2 : c_c.1=4 : else : if joy&8 : vx=vx+2 : c_c.1=5
if joy&1 : vy=vy-2 : else : if joy&2 : vy=vy+2
goto *draw
}
if joy&4 : nx-- : c_c.0=1 : else : if joy&8 : nx++ : c_c.0=2
if joy&1 : ny-- : else : if joy&2 : ny++
;自機操作
if joy&16 {
if time>20 {
AMdFindCharacter space, 0or6, 0, 100 : m_ec
if space!-1 {
AMdCreateCharacter space, 6, nx+7, ny-10 : m_ec
c_m.space=AMDDRAW_CHR_MOVE_PARALLEL | AMDDRAW_CHR_MOVE_RANGE : m_ec
c_vy.space=-3000 : m_ec
c_c.space=6 : m_ec
c_f=16
AMdFindCharacter space, 0or6, 0, 100 : m_ec
AMdCreateCharacter space, 6, nx-7, ny-10 : m_ec
c_m.space=AMDDRAW_CHR_MOVE_PARALLEL | AMDDRAW_CHR_MOVE_RANGE : m_ec
c_vy.space=-3000 : m_ec
c_c.space=6 : m_ec
c_f=16
}
time=0
}
}
0078翔犬朗
NGNGtime++
if time=9 {
AMdFindCharacter space, 0or6, 0, 100 : m_ec
AMdCreateCharacter space, 6, nx+7, ny-10 : m_ec
c_m.space=AMDDRAW_CHR_MOVE_PARALLEL | AMDDRAW_CHR_MOVE_RANGE : m_ec
c_vy.space=-3000 : m_ec
c_c.space=6 : m_ec
c_f=16
AMdFindCharacter space, 0or6, 0, 100 : m_ec
AMdCreateCharacter space, 6, nx-7, ny-10 : m_ec
c_m.space=AMDDRAW_CHR_MOVE_PARALLEL | AMDDRAW_CHR_MOVE_RANGE : m_ec
c_vy.space=-3000 : m_ec
c_c.space=6 : m_ec
c_f=16
}
; キャラクタ表示
AMdPutCharacter 0, 6 : m_ec
AMdPutChip 5, 200, 100
hit=1
AMdHitTest hit, 16, 0, 5000
if hit>1 :c=white
; 画面の更新
AMdUpdateScreen 10, AMDDRAW_CLEAR_FLAG_CLEAR, c : m_ec
goto *mainLoop
*exit
AMdExit
end
0079翔犬朗
NGNGさっぱり解決できん(汗)
誰かへるぷみ〜
HSP(プログラム言語)+AMDDRAW(ダイレクトXプラグイン)
0080デフォルトの名無しさん
NGNGNULLのビットパターンはゼロだけじゃないよ・・・
FAQにどっかの変なプラットフォームはそうだとあった
0081デフォルトの名無しさん
NGNGそういうプラットフォームなら有効な文字列のアドレスがNULLの
ビットパターンになるわけない
どっちにしろ問題ないことくらい常識で分かれ
0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084ちーぼー
NGNG0085wkitty.cpp(1)
NGNG* wkitty.cpp : No Mouth CAT
*Version 0.12002.09.11by anonymous
*
* このプログラムは PDS です。作者は匿名です。
* 口の無い猫がぐるぐる回りながら画面を飛び回ります。この猫は No Mouth CAT です。
* くれぐれもハ○ーキ○ィと呼ばないでください。サ○リオにしかられます。
* X11 の ico みたいなプログラムが作りたくて、win32 プログラミングの学習で作りました。
* 作者はソースのみ公開します。
* フリーで手に入る Borland C++ でコンパイルする事を前提にしています。
* bcc32 -W wkitty としてコンパイルしてください。
* 他にも WIN32SDK をサポートした C++ ならたいがい通ると思います。
*
* 掲示板でソース投稿する事を前提にしてるので、テキストにできないリソースは付いてません。
* アイコンぐらいはコンパイルする人が付けてやってください。
* アイコンエディタで wkitty.ico というのを作ったら、wkitty.rc というファイル名で
* IDI_ICONICONDISCARDABLE"wkitty.ico"
* という内容のファイルを作って、コンパイルの後に
* brc32 wkitty.rc を実行するとアイコンが付きます。(Borland C++ の場合)
*
* 無保証です。匿名の PDS なので、誰がどう手を加えて何をしようが勝手です。
* コンパイルした実行ファイルも含めて、改造、転載、雑誌掲載、フリーソフトライブラリへの
* 登録等、作者に断り無く行ってください。
*
* どなたかちらつきを無くす方法を考えてください。
*
* ちょっと改造するとアソパソマソやギコ猫ぐらいは回せると思います。
*/
0086wkitty.cpp(2)
NGNG#include <windows.h>
#include <math.h>
LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM);//ウィンドウ関数
LPCSTR ClassName="Skelton";//ウィンドウクラス名
HINSTANCE hInstance;//インスタンスハンドル
//顔面パーツの色・中心座標・大きさ定義(楕円球)
typedef struct { unsigned int r; unsigned int g; unsigned int b;// 色
double x; double y; double z;// 中心座標
double w; double h; double d; } DAENKYUU;// 幅・高さ・奥行き
DAENKYUU ObjFace = { 255,255,255, 0,0,0, 74,60,60 };
DAENKYUU ObjREar = { 255,255,255, -25,20,0, 20,30,12 };
DAENKYUU ObjLEar = { 255,255,255, -ObjREar.x,ObjREar.y,ObjREar.z, ObjREar.w,ObjREar.h,ObjREar.d };
DAENKYUU ObjNose = { 255,255,0, 0,-11,29, 8,4,4 };
DAENKYUU ObjREye = { 0,0,0, -20,-6,24, 4,6,4 };
DAENKYUU ObjLEye = { 0,0,0, -ObjREye.x,ObjREye.y,ObjREye.z, ObjREye.w,ObjREye.h,ObjREye.d };
DAENKYUU ObjRibbon1 = { 255,0,0, 17,20,10, 14,14,10 };
DAENKYUU ObjRibbon2 = { 255,0,0, 8,25,8, 16,20,10 };
DAENKYUU ObjRibbon3 = { 255,0,0, 26,15,12, 16,20,10 };
DAENKYUU *Obj[9] = { &ObjREar, &ObjLEar, &ObjFace, &ObjNose, &ObjREye, &ObjLEye,
&ObjRibbon2, &ObjRibbon3, &ObjRibbon1 };
0087wkitty.cpp(3)
NGNGtypedef struct { double x1; double y1; double z1;
double x2; double y2; double z2; } HIGE;
HIGE Hige1 = { 29,-1,21, 40,-1,21 };
HIGE Hige2 = { 28,-8,20, 39,-12,20 };
HIGE Hige3 = { 25,-15,18, 37,-23,18 };
HIGE Hige4 = { -Hige1.x1, Hige1.y1, Hige1.z1, -Hige1.x2, Hige1.y2, Hige1.z2 };
HIGE Hige5 = { -Hige2.x1, Hige2.y1, Hige2.z1, -Hige2.x2, Hige2.y2, Hige2.z2 };
HIGE Hige6 = { -Hige3.x1, Hige3.y1, Hige3.z1, -Hige3.x2, Hige3.y2, Hige3.z2 };
HIGE *Hige[6] = { &Hige1, &Hige2, &Hige3, &Hige4, &Hige5, &Hige6 };
// 描画サイズ
#define OBJSIZEX 80
#define OBJSIZEY 65
// 移動距離
#define DX 1
#define DY 1
// グローバル変数の初期化
int windowsizex = 300;
int windowsizey = 200;
int xx = windowsizex / 2;
int yy = windowsizey / 2;
0088wkitty.cpp(4)
NGNG// main 関数
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,
LPSTR lpszArgs, int nWinMode)
{
HWND hWnd;//ウィンドウハンドル
MSG msg;//メッセージ
WNDCLASSEX wc;//ウィンドウクラス
hInstance = hThisInst;//グローバル化
//ウィンドウクラス定義
wc.hInstance = hInstance;//インスタンス
wc.lpszClassName = ClassName;//クラス名
wc.lpfnWndProc = WindowProc;//ウィンドウ関数名
wc.style = 0;//クラススタイル
wc.cbSize = sizeof(WNDCLASSEX);//構造体サイズ
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //アイコンハンドル
wc.hIconSm = LoadIcon(NULL, IDI_WINLOGO);//スモールアイコン
wc.hCursor = LoadCursor(NULL, IDC_ARROW);//マウスポインタ
wc.lpszMenuName = NULL;//メニュー(なし)
wc.cbClsExtra = 0;//クラス拡張情報
wc.cbWndExtra = 0;//ウィンドウ拡張情報
wc.hbrBackground = (HBRUSH) COLOR_WINDOW;//ウィンドウの背景色
if(!RegisterClassEx(&wc)) return 0;//ウィンドウクラス登録
0089wkitty.cpp(5)
NGNG//ウィンドウ生成
hWnd = CreateWindow(
ClassName,//ウィンドウクラス名
"Wkitty : No Mouth CAT",//ウィンドウ名
WS_OVERLAPPEDWINDOW,//ウィンドウ属性
CW_USEDEFAULT,//ウィンドウ表示位置(X)
CW_USEDEFAULT,//ウィンドウ表示位置(Y)
windowsizex,//ウィンドウサイズ(X)
windowsizey,//ウィンドウサイズ(Y)
HWND_DESKTOP,//親ウィンドウハンドル
NULL,//
hInstance,//インスタンスハンドル
NULL//
);
//ウィンドウ表示
ShowWindow(hWnd, nWinMode);//ウィンドウ表示モード
UpdateWindow(hWnd);//ウインドウ更新
//メッセージループ
while(GetMessage(&msg, NULL, 0, 0)){//メッセージを取得(吸い上げ)
TranslateMessage(&msg);//
DispatchMessage(&msg);//メッセージを各ウィンドウに送る
}
return msg.wParam;//プログラム終了
}
0090wkitty.cpp(6)
NGNG// OnPaint 再描画処理 (WM_PAINTメッセージ)
LRESULT CALLBACK OnPaint(HWND hWnd)
{
const double PI = 3.141592654;
static int dx = DX;// 移動距離 X
static int dy = DY;// 移動距離 Y
static int rot = 0;// 回転角度
int i;// 汎用ループ変数
unsigned int red, green, blue;// ブラシ描画色
enum objtype { LINE, DAEN };// 物体の属性
struct { objtype t; double z; int n; } zb[15], tz;// 簡易 Z バッファ
double rad, sinrad, cosrad, xc, xw, wc, ds, theta;// 座標演算用変数
int x1, x2, y1, y2;// 描画時の画面内座標
HDC hDC;// デバイスコンテキスト
HBRUSH hBrushOld;// 旧ブラシ保存用
HBRUSH hBrush[9];// 楕円を描画するブラシ
HPEN hPenOld;// ペン・ハンドル
PAINTSTRUCT ps;// PAINTSTRUCT構造体
hDC = BeginPaint(hWnd, &ps);// 描画開始
hPenOld = (HPEN)SelectObject(hDC, GetStockObject(BLACK_PEN));// 黒ペン選択
hBrushOld = (HBRUSH)SelectObject(hDC, GetStockObject(WHITE_BRUSH));// 白ブラシ選択
// 角度とその三角関数。
rad = 2 * PI * rot / 360;
sinrad = sin( rad );
cosrad = cos( rad );
0091wkitty.cpp(7)
NGNG// 描画中心位置を決定する
xx += dx;
if ( xx <= OBJSIZEX / 2 ) {
dx = DX;
xx = OBJSIZEX / 2;
}
if ( xx >= windowsizex - OBJSIZEX / 2 ) {
dx = -DX;
xx = windowsizex - OBJSIZEX / 2;
}
yy += dy;
if ( yy <= OBJSIZEY / 2 ) {
dy = DY;
yy = OBJSIZEY / 2;
}
if ( yy >= windowsizey - OBJSIZEY / 2 ) {
dy = -DY;
yy = windowsizey - OBJSIZEY / 2;
}
0092wkitty.cpp(8)
NGNG// 描画オブジェクトのセンター位置を Z バッファに入れる
for ( i = 0; i < 9; ++i ) {// 楕円球オブジェクトの深さ
zb[i].t = DAEN;
zb[i].n = i;
// 中心座標を回転変換
zb[i].z = (*Obj[i]).x * sinrad + (*Obj[i]).z * cosrad;
}
for ( i = 9; i < 15; ++i ) {// 直線オブジェクトの深さ
int j = i - 9;
zb[i].t = LINE;
zb[i].n = j;
// 中心座標を回転変換
zb[i].z = ( (*Hige[j]).x1 * sinrad + (*Hige[j]).z1 * cosrad
+ (*Hige[j]).x2 * sinrad + (*Hige[j]).z2 * cosrad ) / 2;
}
0093wkitty.cpp(9)
NGNG// zb[].z をキーに zb[] をバブルソートする
int j, k;
k = 14;
while ( k >= 0 ) {
j = -1;
for ( i = 1; i <= k; i++ ) {
if ( zb[i-1].z > zb[i].z ) {
j = i - 1;
tz.t = zb[j].t; zb[j].t = zb[i].t; zb[i].t = tz.t;
tz.z = zb[j].z; zb[j].z = zb[i].z; zb[i].z = tz.z;
tz.n = zb[j].n; zb[j].n = zb[i].n; zb[i].n = tz.n;
}
}
k = j;
}
0094wkitty.cpp(10)
NGNGfor ( i = 0; i < 15; ++i ) {
switch ( zb[i].t ) {
case DAEN:
red = (*Obj[zb[i].n]).r;// 色を取得してブラシ作成
green = (*Obj[zb[i].n]).g;
blue = (*Obj[zb[i].n]).b;
hBrush[zb[i].n] = CreateSolidBrush(RGB(red, green, blue));
SelectObject(hDC, hBrush[zb[i].n]);
// 回転変換
xc = cosrad * (*Obj[zb[i].n]).x - sinrad * (*Obj[zb[i].n]).z;
// 回転した楕円の X 軸投影座標を求める
theta = atan( - (*Obj[zb[i].n]).d * sinrad / (*Obj[zb[i].n]).w / cosrad );
wc = cos( theta ) * (*Obj[zb[i].n]).w / 2;
ds = sin( theta ) * (*Obj[zb[i].n]).d / 2;
xw = sqrt( wc * wc + ds * ds);
// 楕円の描画
x1 = xc - xw + xx;
x2 = xc + xw + xx;
y1 = yy - (*Obj[zb[i].n]).y - (*Obj[zb[i].n]).h / 2;
y2 = yy - (*Obj[zb[i].n]).y + (*Obj[zb[i].n]).h / 2;
Ellipse(hDC, x1, y1, x2, y2 );
break;
0095wkitty.cpp(11)
NGNG// 回転変換
x1 = cosrad * (*Hige[zb[i].n]).x1 - sinrad * (*Hige[zb[i].n]).z1 + xx;
x2 = cosrad * (*Hige[zb[i].n]).x2 - sinrad * (*Hige[zb[i].n]).z2 + xx;
y1 = yy - (*Hige[zb[i].n]).y1;
y2 = yy - (*Hige[zb[i].n]).y2;
// 直線を描く
MoveToEx( hDC, x1, y1, NULL );
LineTo( hDC, x2, y2 );
break;
}
}
SelectObject(hDC, hBrushOld);// ブラシを元に戻す
SelectObject(hDC, hPenOld);// ペンを元に戻す
for ( i = 0; i < 9; ++i ) {
DeleteObject(hBrush[i]);// ブラシ削除
}
EndPaint(hWnd, &ps);// 描画終了
++rot;// 回転角度更新
if ( rot >= 360 ) rot = 0;
return 0L;
}
0096wkitty.cpp(12)LAST
NGNG// ウィンドウ関数
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wP, LPARAM lP)
{
switch(uMsg){
case WM_DESTROY:// ウィンドウ終了通知
MessageBox( hWnd, "wkitty(No Mouth CAT) is PDS. Programed by anonymous. Ver.0.1 2002.09.11", "No Mouth CAT", MB_OK );
PostQuitMessage(0);// プログラム終了メッセージ送信
return 0L;// イベント処理終了
case WM_PAINT:
return OnPaint( hWnd );// 描画処理ルーチン
case WM_SIZE:// ウィンドウサイズ変更時
windowsizex = LOWORD( lP );// 横のサイズ取り出し
windowsizey = HIWORD( lP );// 縦のサイズ取り出し
if ( xx + OBJSIZEX / 2 >= windowsizex ) xx = windowsizex - OBJSIZEX / 2;
if ( yy + OBJSIZEY / 2 >= windowsizey ) yy = windowsizey - OBJSIZEY / 2;
return 0L;
#ifdef DEBUG
case WM_LBUTTONDOWN:// デバッグ用。マウス左クリックで描画
OnPaint( hWnd );
InvalidateRect( hWnd, NULL, TRUE );
#endif
default:
#ifndef DEBUG// デバッグでないときはデフォルトで描画
OnPaint( hWnd );
InvalidateRect( hWnd, NULL, TRUE );
#endif
return DefWindowProc(hWnd, uMsg, wP, lP);//標準メッセージ処理
}
return 0L;//イベント処理終了
}
0097長いソースはここ使うべし
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
0098名無しさん@Emacs
NGNGこれ、ダブルバッファリングになってる?ダブルバッファリング使えばちらつきはある程度押えれる。
あと、無駄な領域まで描画するのは止めた方がいい。
0099デフォルトの名無しさん
NGNGとりあえずVC++で通ることだけは確認したぞ。警告は若干出てるけど。
0100デフォルトの名無しさん
NGNG0101デフォルトの名無しさん
NGNGインデントが駄目になる事は覚悟してたけど、スペーシングに TAB を使うのは
掲示板投稿ではまずいと今気がつきました。
detab しとくべきだった。
コーディングでいちばん苦労した点は回転変換した楕円の投影座標の式を出すのに、
三角関数の微分という数学らしい事をひさびさにやった事です。
0102デフォルトの名無しさん
NGNGんじゃ漏れも
int GetLineNumber(const char* FileName)
{
ifstream fin(FileName);
fin.unsetf(ios::skipws);
return count(istream_iterator<char>(fin), istream_iterator<char>(), '\n');
}
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG0105wkitty.c(1)
NGNG#include <windows.h>
#include <math.h>
#define EN 9
struct{int r;int g;int b;double x;double y;double z;double w;double h;double d;}el[EN]={
{255,255,255,0,0,0,74,60,60},{255,255,255,-25,20,0,20,30,12},{255,255,255,25,20,0,20,30,12},
{255,255,0,0,-11,29,8,4,4},{0,0,0,-20,-6,24,4,6,4},{ 0,0,0,20,-6,24,4,6,4},
{255,0,0,17,20,10,14,14,10},{255,0,0,8,25,8,16,20,10},{255,0,0,26,15,12,16,20,10}};
#define LN 6
struct{double x1;double y1;double z1;double x2;double y2;double z2;}li[LN]={
{29,-1,21,40,-1,21},{28,-8,20,39,-12,20},{25,-15,18,37,-23,18},
{-29,-1,21,-40,-1,21},{-28,-8,20,-39,-12,20},{-25,-15,18,-37,-23,18}};
#define SIZEX 80
#define UPY 36
#define LOY 31
#define DX 1
#define DY 1
LPCSTR CN="Wkitty";int wx=300,wy=200,xx=150,yy=100;
0106wkitty.c(2)
NGNGconst double PI=3.14159;static int dx=DX,dy=DY,d=0;int i,j,k,x1,x2,y1,y2;
enum ot{LI,EL};struct{enum ot t;double z;int n;}s[15],u;
double rd,sr,cr,xc,xw,wc,ds,th;HDC hDC;HBRUSH hBOld,hB[9];HPEN hPenOld;PAINTSTRUCT ps;
hDC=BeginPaint(hWnd, &ps);hPenOld=(HPEN)SelectObject(hDC,GetStockObject(BLACK_PEN));
hBOld=(HBRUSH)SelectObject(hDC,GetStockObject(WHITE_BRUSH));
rd=2*PI*d/360;sr=sin(rd);cr=cos(rd);
xx+=dx;if(xx<=SIZEX/2){dx=DX;xx=SIZEX/2;}if(xx>=wx-SIZEX/2){dx=-DX;xx=wx-SIZEX/2;}
yy+=dy;if(yy<=UPY){dy=DY;yy=UPY;}if(yy>=wy-LOY){dy=-DY;yy=wy-LOY;}
for(i=0;i<EN;++i){s[i].t=EL;s[i].n=i;s[i].z=el[i].x*sr+el[i].z*cr;}
for(i=EN;i<EN+LN;++i){j=i-EN;s[i].t=LI;s[i].n=j;s[i].z=(li[j].x1*sr+li[j].z1*cr+li[j].x2*sr+li[j].z2*cr)/2;}
k=EN+LN-1;while(k>=0){j=-1;for(i=1;i<=k;i++){if(s[i-1].z>s[i].z){j=i-1;u.t=s[j].t;s[j].t=s[i].t;
s[i].t=u.t;u.z=s[j].z;s[j].z=s[i].z;s[i].z=u.z;u.n=s[j].n;s[j].n=s[i].n;s[i].n=u.n;}}k=j;}
for(i=0;i<EN+LN;++i){switch(s[i].t){
case EL:hB[s[i].n]=CreateSolidBrush(RGB(el[s[i].n].r,el[s[i].n].g,el[s[i].n].b));
SelectObject(hDC,hB[s[i].n]);xc=cr*el[s[i].n].x-sr*el[s[i].n].z;th=atan(-el[s[i].n].d*sr/el[s[i].n].w/cr);
wc=cos(th)*el[s[i].n].w/2;ds=sin(th)*el[s[i].n].d/2;xw=sqrt(wc*wc+ds*ds);
x1=xc-xw+xx;x2=xc+xw+xx;y1=yy-el[s[i].n].y-el[s[i].n].h/2;y2=yy-el[s[i].n].y+el[s[i].n].h/2;
Ellipse(hDC,x1,y1,x2,y2);break;
case LI:x1=cr*li[s[i].n].x1-sr*li[s[i].n].z1+xx;x2=cr*li[s[i].n].x2-sr*li[s[i].n].z2+xx;
y1=yy-li[s[i].n].y1;y2=yy-li[s[i].n].y2;MoveToEx(hDC,x1,y1,NULL);LineTo(hDC,x2,y2);break;}}
SelectObject(hDC,hBOld);SelectObject(hDC,hPenOld);
for(i=0;i<EN;++i)DeleteObject(hB[i]);EndPaint(hWnd,&ps);++d;if(d>=360)d=0;return 0L;}
0107wkitty.c(3)
NGNGswitch(uMsg){
case WM_DESTROY:
MessageBox(hWnd,"Wkitty(No Mouth CAT) is PDS by anonymous. Ver.0.2 2002.09.14",CN,MB_OK);
PostQuitMessage(0);break;
case WM_PAINT:
return OnPaint(hWnd);
case WM_SIZE:
wx=LOWORD(lP);wy=HIWORD(lP);if(xx+SIZEX/2>=wx)xx=wx-SIZEX/2;if(yy+LOY>=wy)yy=wy-LOY;break;
#ifdef DEBUG
case WM_LBUTTONDOWN:OnPaint(hWnd);InvalidateRect(hWnd,NULL,TRUE);break;
#endif
default:
#ifndef DEBUG
OnPaint(hWnd);InvalidateRect(hWnd,NULL,TRUE);
#endif
return DefWindowProc(hWnd,uMsg,wP,lP);
}return 0L;}
0108wkitty.c(4)
NGNGHWND h;MSG m;WNDCLASS w;w.hInstance=I;w.lpszClassName=CN;w.lpfnWndProc=WP;w.style=0;
w.hIcon=LoadIcon(NULL,IDI_APPLICATION);w.hCursor=LoadCursor(NULL,IDC_ARROW);
w.lpszMenuName=NULL;w.cbClsExtra=w.cbWndExtra=0;w.hbrBackground=(HBRUSH)COLOR_WINDOW;
if(!RegisterClass(&w))return 0;
h=CreateWindow(CN,CN,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,wx,wy,NULL,NULL,I,NULL);
ShowWindow(h,n);UpdateWindow(h);
while(GetMessage(&m,NULL,0,0)){TranslateMessage(&m);DispatchMessage(&m);}return m.wParam;}
0109wkitty
NGNGC言語としてコンパイルできるようにした。
掲示板投稿を考慮してソースを圧縮したスタイルにした。
分割数は12から4に減ったが読みにくさ激増。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG俺には十分に読み易い部類だけど?
0112デフォルトの名無しさん
NGNGそうでしたか
自分は公の場でソースを公開する上で、それぐらいの礼儀があっても
いいのではと思いまして
大変失礼しました
0113デフォルトの名無しさん
NGNG>掲示板投稿を考慮してソースを圧縮したスタイルにした。
が見えないのか。
自分でindent等を使って整形すればいいでしょう。
0114デフォルトの名無しさん
NGNGどうしても見てもらいたきゃあぷろだにでも上げろ
0115デフォルトの名無しさん
NGNG案外、冷たいなあ
まあ、おれは読まん(w
0116wkitty
NGNG自力でコンパイルできて icon ぐらいは付けられる閲覧者が
比較的多いと思われる 2ch のプログラム板を公開場所に選びました。
読んで評価していただかなくとも、コンパイルして実行してみて
笑ってもらえたら私としては目的達成です。
受け狙いのジョークソフトですから。
Version 0.1 はコメント入ってて TAB でインデントされてたんですが、
掲示板投稿するとTAB はスペーシングされないし、12分割でめげました。
匿名にするつもりじゃなかったら、自分のホームページにアップしますが、
閲覧者が少ないから誰も見てくれない(悲)。
0117デフォルトの名無しさん
NGNGうぷろだ。
0118デフォルトの名無しさん
NGNGどんなすげぇヤツでもこのコソパイラのンースには勝てないだろう。
これを見て自信つけないように!
0119デフォルトの名無しさん
NGNGシュールな wkitty 応援age
0120111
NGNG描画データは頑張ったね。
Invalidateを毎回させてるのはどうかなあ、 SetTimerして WM_TIMER で Invalidateにするほうが
ダブルバッファにしないなら Invalidateで
キャラの最小矩形で消去した方がチラツキが少し減るとか
まあ普通のコメントしか出来ないなあ
0121wkitty
NGNG1.キャラの最小矩形で InvalidateRect : 他のウィンドウに重なってそこにキャラ
が入った時に再描画が止まった。
2.ダブルバッファ : まだ win32 プログラミングに慣れてないのでポカやってる
かもしれないが、試したところ、マウスをウィンドウ上でグリグリやると
描画されなかった。
120 で指摘されてるように SetTimer して WM_TIMER で InvalidateRect する
のが正解と思うのですが、遅いマシンでどれぐらいのタイマー値までついてくる
かがわからないのでまだ試してません。
最終的には決め打ちで適当なタイマー値に設定してやる事になると思います。
ところでプログラム名が wkitty になっているのは、X11 移植版に xkitty
という名を付けるつもりなので、そうなってます。
X のプログラミングもマスターしてないんでいつになるかはわかりませんが。
0122wkitty
NGNGポカミスの修正。
3行目 enum ot{LI,EL};struct{enum ot t;double z;int n;}s[15],u;
の s[15] は s[EN+LN] とすべきです。
4行目 double rd,sr,cr,xc,xw,wc,ds,th;HDC hDC;HBRUSH hBOld,hB[9];HPEN hPenOld;PAINTSTRUCT ps;
の hB[9] は hB[EN] とすべきです。
0124wkitty.c(3)をいじってみる
NGNGSetTimer を使ってみたらかなり遅くなったので、default: でペイントして
WM_TIMER でInvalidateRectしてみたが、これは考えていた動きじゃない。
ウィンドウ上でマウスをグリグリした時だけ早く動く。
SetTimer したらメッセージループがタイマー値か他のイベントが入ってこないと
回ってくれないみたいだ。
/* WndProc 関数 */ LRESULT CALLBACK WP(HWND hWnd,UINT uMsg,WPARAM wP,LPARAM lP){
//RECT r;r.left=xx-SIZEX/2-DX-4;r.top=yy-UPY-DY;r.right=xx+SIZEX/2+DX+4;r.bottom=yy+LOY+DY;
switch(uMsg){
#ifndef DEBUG
#define IDTIMER 10000
case WM_CREATE: SetTimer(hWnd,IDTIMER,10,NULL);break;
case WM_TIMER: if (wP==IDTIMER)InvalidateRect(hWnd,NULL,TRUE);break;
#endif
case WM_DESTROY:
MessageBox(hWnd,"Wkitty(No Mouth CAT) is PDS by anonymous. Ver.0.3 2002.09.16",CN,MB_OK);
PostQuitMessage(0);break;
case WM_PAINT: return OnPaint(hWnd);
case WM_SIZE:
wx=LOWORD(lP);wy=HIWORD(lP);if(xx+SIZEX/2>=wx)xx=wx-SIZEX/2;if(yy+LOY>=wy)yy=wy-LOY;break;
#ifdef DEBUG
case WM_LBUTTONDOWN:OnPaint(hWnd);InvalidateRect(hWnd,&r,TRUE);break;
#endif
default:
#ifndef DEBUG
OnPaint(hWnd);
#endif
return DefWindowProc(hWnd,uMsg,wP,lP);
}return 0L;}
0125デフォルトの名無しさん
NGNGいや、これは単なるグラフィックスでGUIではないだろ・・
0126C言語暦ンヶ月
NGNGオレにとってはDOSプロンプトでないだけでGUIなのですw
すみません、素で知りませんでした…。
やっぱりグラフィックスだのGUIだのは、
猫でもで一通り勉強してから改造したりして遊ぶものですかね。
まだCをある程度使える -> C++ -> SDKだのと道のりは遠いです。
ところでwkittyさんのやつは、
円柱とかも作れますよね?
昨
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNG0129デフォルトの名無しさん
NGNG0130デフォルトの名無しさん
NGNGGUIはシステム(OSやライブラリ等)によっても大分違いますが、
CやC++は覚えておくと、大体どこへいっても役に立ちます。
きっちり理解してから先へ進むのがよいでしょう。
2〜3ヶ月もあれば、大抵のことはできるようになると思います。
グラフィックはAPI,MSCなどを使うよりも
目的別のラッパーライブラリを使う方が便利といえば便利です。
(フリーのゲーム用ライブラリとかです)
0131C言語暦ンヶ月
NGNG>>130
がむばってみます。
とりあえず、ハ○ーキ○oのやつをしぃに改造しているのですが、
構造体の数を変更
defineの数を変更した時点でコンパイルしても
「不正な処理」がでて開けなかった。
折れって素質無いのかもw
0132デフォルトの名無しさん
NGNG++iのほうが速いんですか?
0133デフォルトの名無しさん
NGNG0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNG処理系による
0136デフォルトの名無しさん
NGNG>>135もそうだけど,iの型によっても変わる。
(ちょっとスレ違いだが)iがSTLの(でかめの)イテレータだった場合は ++i の方が断然速い。
0137デフォルトの名無しさん
NGNGi+i
0138C言語暦ンヶ月
NGNG2 * i よりは i + iの方が速そうですね。
>>136
ということは、 i++でも++i でも変わらないときは
とりあえず ++i にしといたほうがお得ということですか?
C言語以外(Perlとか)ではどうなんだろう。。
0139デフォルトの名無しさん
NGNG基本的に ++i の方が値を保存しておく必要がないので速い。
ただし最適化によって変わるので一概に言えない。まあ++iの方が良いってことさね。
ちょっとずれるが,Perlは
if (EXPR) {
hoge;
}
よりも
hoge if (EXPR);
の方が速い。
0140C言語暦ンヶ月
NGNG/* (・∀・) ( ・∀) ( ・) ( ) (・ ) (∀・ ) (・∀・) !! */
#define EN 5
//顔面パーツ.色・中心座標・大きさ定義(楕円球)
struct{
int r, g, b; // RGB=色
double x, y, z; // 中心座標
double w, h, d; // 幅,高さ,奥行き
}el[EN]={
/* 赤 緑 青 x y z 幅 高 奥 */
{255,255,255, 0, 0, 0,74,60,60},
{255,255,255,-25,20, 0,20,30,12},
{255,255,255, 25,20, 0,20,30,12},
{ 0, 0, 0,-20,-6,24, 4, 6, 4},
{ 0, 0, 0, 20,-6,24, 4, 6, 4}
};
#define LN 3
//ひげの座標定義(直線)
struct{
double x1, y1, z1;
double x2, y2, z2;
}li[LN]={
/* 始点 x y z 終点 x y z */
{ 0,-20,25, 15,10,25},
{ 0,-20,25,-15,10,25},
{-10, 0,25, 10, 0,25}
};
0141デフォルトの名無しさん
NGNG耳が ∩ じゃないか。 ∧ じゃないとw
0142デフォルトの名無しさん
NGNGそだね。耳が∩じゃ家猫じゃなくて山猫になってしまう。
0143wkitty.c作者
NGNG正立した楕円球と直線しか考えてないです。
アソパソマソぐらいはモデリングデータの変更だけで回ると思います。
ギコ猫の耳を回すために、楕円錐の struct 配列を三角形の Polygon で描画するルーチンと、
耳の付け根を顔面の楕円より先に描画しないようにソートの開始・終了位置を工夫する
方法は考えてありますが、kitty のちらつきを無くして安定して早く回す方が優先
だったので、次からその解決版をアプします。(毎度長くてごめん)
0144wkitty.c(1)完成版
NGNG#include <windows.h>
#include <math.h>
#define EN 9
struct{int r;int g;int b;double x;double y;double z;double w;double h;double d;}el[EN]={
{255,255,255,0,0,0,74,60,60},{255,255,255,-25,20,0,20,30,12},{255,255,255,25,20,0,20,30,12},
{255,255,0,0,-11,29,8,4,4},{0,0,0,-20,-6,24,4,6,4},{ 0,0,0,20,-6,24,4,6,4},
{255,0,0,17,20,10,14,14,10},{255,0,0,8,25,8,16,20,10},{255,0,0,26,15,12,16,20,10}};
#define LN 6
struct{double x1;double y1;double z1;double x2;double y2;double z2;}li[LN]={
{29,-1,21,40,-1,21},{28,-8,20,39,-12,20},{25,-15,18,37,-23,18},
{-29,-1,21,-40,-1,21},{-28,-8,20,-39,-12,20},{-25,-15,18,-37,-23,18}};
#define SIZEX 92
#define UPY 36
#define LOY 31
#define DX 1
#define DY 1
#define SIZEY (UPY+LOY)
LPCSTR CN="Wkitty";int wx=300,wy=200,xx=150,yy=100,dx=DX,dy=DY;HDC hDC,hmDC;PAINTSTRUCT ps;HBITMAP hBit;
0145wkitty.c(2)完成版
NGNGenum ot{LI,EL};struct{enum ot t;double z;int n;}s[EN+LN],u;double rd,sr,cr,xc,xw,wc,ds,th;
HBRUSH hBOld,hB[EN];HPEN hPenOld;
hDC=BeginPaint(hWnd, &ps);hPenOld=(HPEN)SelectObject(hmDC,GetStockObject(BLACK_PEN));
hBOld=(HBRUSH)SelectObject(hmDC,GetStockObject(LTGRAY_BRUSH));PatBlt(hmDC,0,0,SIZEX,SIZEY,PATCOPY);
rd=2*PI*d/360;sr=sin(rd);cr=cos(rd);
for(i=0;i<EN;++i){s[i].t=EL;s[i].n=i;s[i].z=el[i].x*sr+el[i].z*cr;}
for(i=EN;i<EN+LN;++i){j=i-EN;s[i].t=LI;s[i].n=j;s[i].z=(li[j].x1*sr+li[j].z1*cr+li[j].x2*sr+li[j].z2*cr)/2;}
k=EN+LN-1;while(k>=0){j=-1;for(i=1;i<=k;i++){if(s[i-1].z>s[i].z){j=i-1;u.t=s[j].t;s[j].t=s[i].t;
s[i].t=u.t;u.z=s[j].z;s[j].z=s[i].z;s[i].z=u.z;u.n=s[j].n;s[j].n=s[i].n;s[i].n=u.n;}}k=j;}
for(i=0;i<EN+LN;++i){switch(s[i].t){
case EL:hB[s[i].n]=CreateSolidBrush(RGB(el[s[i].n].r,el[s[i].n].g,el[s[i].n].b));
SelectObject(hmDC,hB[s[i].n]);xc=cr*el[s[i].n].x-sr*el[s[i].n].z;th=atan(-el[s[i].n].d*sr/el[s[i].n].w/cr);
wc=cos(th)*el[s[i].n].w/2;ds=sin(th)*el[s[i].n].d/2;xw=sqrt(wc*wc+ds*ds);
Ellipse(hmDC,xc-xw+SIZEX/2,UPY-el[s[i].n].y-el[s[i].n].h/2,xc+xw+SIZEX/2,UPY-el[s[i].n].y+el[s[i].n].h/2);break;
case LI: MoveToEx(hmDC,cr*li[s[i].n].x1-sr*li[s[i].n].z1+SIZEX/2,UPY-li[s[i].n].y1,NULL);
LineTo(hmDC,cr*li[s[i].n].x2-sr*li[s[i].n].z2+SIZEX/2,UPY-li[s[i].n].y2);break;}}
SelectObject(hmDC,hBOld);SelectObject(hmDC,hPenOld);
for(i=0;i<EN;++i)DeleteObject(hB[i]);EndPaint(hWnd,&ps);++d;if(d>=360)d=0;return 0L;}
0146wkitty.c(3)完成版
NGNGswitch(uMsg){case WM_CREATE:
#ifndef DEBUG
#define IDTIMER 10000
SetTimer(hWnd,IDTIMER,10,NULL);
#endif
hDC=GetDC(hWnd);hmDC=CreateCompatibleDC(hDC);hBit=CreateCompatibleBitmap(hDC,SIZEX,SIZEY);SelectObject(hmDC,hBit);
SelectObject(hmDC,GetStockObject(LTGRAY_BRUSH));PatBlt(hmDC,0,0,SIZEX,SIZEY,PATCOPY);ReleaseDC(hWnd,hDC);break;
case WM_DESTROY: DeleteDC(hmDC);DeleteObject(hBit);
MessageBox(hWnd,"Wkitty(No Mouth CAT) is PDS by anonymous. Ver.0.4 2002.09.17",CN,MB_OK);PostQuitMessage(0);break;
case WM_PAINT: OnPaint(hWnd);BitBlt(hDC,xx-SIZEX/2,yy-UPY,SIZEX,SIZEY,hmDC,0,0,SRCCOPY);break;
case WM_SIZE: wx=LOWORD(lP);wy=HIWORD(lP);if(xx+SIZEX/2>=wx)xx=wx-SIZEX/2;if(yy+LOY>=wy)yy=wy-LOY;break;
#ifdef DEBUG
case WM_LBUTTONDOWN:
#else
case WM_TIMER: for(i=0;i<50;++i){
#endif
xx+=dx;if(xx<=SIZEX/2){dx=DX;xx=SIZEX/2;}if(xx>=wx-SIZEX/2){dx=-DX;xx=wx-SIZEX/2;}
yy+=dy;if(yy<=UPY){dy=DY;yy=UPY;}if(yy>=wy-LOY){dy=-DY;yy=wy-LOY;}
OnPaint(hWnd);BitBlt(hDC,xx-SIZEX/2,yy-UPY,SIZEX,SIZEY,hmDC,0,0,SRCCOPY);
#ifndef DEBUG
}
#endif
break;
default: return DefWindowProc(hWnd,uMsg,wP,lP);}return 0L;}
0147wkitty.c(4)完成版
NGNGHWND h;MSG m;WNDCLASS w;w.hInstance=I;w.lpszClassName=CN;w.lpfnWndProc=WP;w.style=0;
w.hIcon=LoadIcon(NULL,IDI_APPLICATION);w.hCursor=LoadCursor(NULL,IDC_ARROW);
w.lpszMenuName=NULL;w.cbClsExtra=w.cbWndExtra=0;w.hbrBackground=(HBRUSH)COLOR_WINDOW;
if(!RegisterClass(&w))return 0;
h=CreateWindow(CN,CN,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,wx,wy,NULL,NULL,I,NULL);
ShowWindow(h,n);UpdateWindow(h);
while(GetMessage(&m,NULL,0,0)){TranslateMessage(&m);DispatchMessage(&m);}return m.wParam;}
0148wkitty
NGNG意味が無く、 WM_Timer で一回だけ描画すると遅くなります。
default で描画するとイベントキューにイベントが入る都度描画するので、
マウスグリグリで描画が早くなりました。
結局、WM_TIMER で50回描画する事にしました。
ビットマップバッファに描いてBitBltする事でちらつきを押さえました。
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG>>105からのやつは25行にしか縮まなかった。
0151デフォルトの名無しさん
NGNGなにも表示されなくなりました>wkitty.c ver0.4
0152wkitty
NGNGうーむ、ビットマップバッファとメインウィンドウのデバイスコンテキスト
の扱いにあまり自信がないけど、こう書いたらうちの Win Me では動きました。
OSもしくはグラフィックドライバに癖あるんでしょうか。
参考にしてるおソースでは GetDC BitBlt ReleaseDC の順で処理されてるけど、
これはそうなってない。
もいっかい検討します。
0153wkitty(2)修正版
NGNGenum ot{LI,EL};struct{enum ot t;double z;int n;}s[EN+LN],u;double rd,sr,cr,xc,xw,wc,ds,th;
HBRUSH hBOld,hB[EN];HPEN hPenOld;
hPenOld=(HPEN)SelectObject(hmDC,GetStockObject(BLACK_PEN));
hBOld=(HBRUSH)SelectObject(hmDC,GetStockObject(LTGRAY_BRUSH));PatBlt(hmDC,0,0,SIZEX,SIZEY,PATCOPY);
rd=2*PI*d/360;sr=sin(rd);cr=cos(rd);
for(i=0;i<EN;++i){s[i].t=EL;s[i].n=i;s[i].z=el[i].x*sr+el[i].z*cr;}
for(i=EN;i<EN+LN;++i){j=i-EN;s[i].t=LI;s[i].n=j;s[i].z=(li[j].x1*sr+li[j].z1*cr+li[j].x2*sr+li[j].z2*cr)/2;}
k=EN+LN-1;while(k>=0){j=-1;for(i=1;i<=k;i++){if(s[i-1].z>s[i].z){j=i-1;u.t=s[j].t;s[j].t=s[i].t;
s[i].t=u.t;u.z=s[j].z;s[j].z=s[i].z;s[i].z=u.z;u.n=s[j].n;s[j].n=s[i].n;s[i].n=u.n;}}k=j;}
for(i=0;i<EN+LN;++i){switch(s[i].t){
case EL:hB[s[i].n]=CreateSolidBrush(RGB(el[s[i].n].r,el[s[i].n].g,el[s[i].n].b));
SelectObject(hmDC,hB[s[i].n]);xc=cr*el[s[i].n].x-sr*el[s[i].n].z;th=atan(-el[s[i].n].d*sr/el[s[i].n].w/cr);
wc=cos(th)*el[s[i].n].w/2;ds=sin(th)*el[s[i].n].d/2;xw=sqrt(wc*wc+ds*ds);
Ellipse(hmDC,xc-xw+SIZEX/2,UPY-el[s[i].n].y-el[s[i].n].h/2,xc+xw+SIZEX/2,UPY-el[s[i].n].y+el[s[i].n].h/2);break;
case LI: MoveToEx(hmDC,cr*li[s[i].n].x1-sr*li[s[i].n].z1+SIZEX/2,UPY-li[s[i].n].y1,NULL);
LineTo(hmDC,cr*li[s[i].n].x2-sr*li[s[i].n].z2+SIZEX/2,UPY-li[s[i].n].y2);break;}}
SelectObject(hmDC,hBOld);SelectObject(hmDC,hPenOld);
for(i=0;i<EN;++i)DeleteObject(hB[i]);
++d;if(d>=360)d=0;return 0L;}
0154wkitty(3)修正版
NGNGswitch(uMsg){case WM_CREATE:
#ifndef DEBUG
#define IDTIMER 10000
SetTimer(hWnd,IDTIMER,10,NULL);
#endif
hDC=GetDC(hWnd);hmDC=CreateCompatibleDC(hDC);hBit=CreateCompatibleBitmap(hDC,SIZEX,SIZEY);SelectObject(hmDC,hBit);
SelectObject(hmDC,GetStockObject(LTGRAY_BRUSH));PatBlt(hmDC,0,0,SIZEX,SIZEY,PATCOPY);ReleaseDC(hWnd,hDC);break;
case WM_DESTROY: DeleteDC(hmDC);DeleteObject(hBit);
MessageBox(hWnd,"Wkitty(No Mouth CAT) is PDS by anonymous. Ver.0.5 2002.09.18",CN,MB_OK);PostQuitMessage(0);break;
case WM_PAINT:
OnPaint();BeginPaint(hWnd,&ps);BitBlt(ps.hdc,xx-SIZEX/2,yy-UPY,SIZEX,SIZEY,hmDC,0,0,SRCCOPY);EndPaint(hWnd,&ps);break;
case WM_SIZE: wx=LOWORD(lP);wy=HIWORD(lP);if(xx+SIZEX/2>=wx)xx=wx-SIZEX/2;if(yy+LOY>=wy)yy=wy-LOY;break;
#ifdef DEBUG
case WM_LBUTTONDOWN:
#else
case WM_TIMER: for(i=0;i<50;++i){
#endif
xx+=dx;if(xx<=SIZEX/2){dx=DX;xx=SIZEX/2;}if(xx>=wx-SIZEX/2){dx=-DX;xx=wx-SIZEX/2;}
yy+=dy;if(yy<=UPY){dy=DY;yy=UPY;}if(yy>=wy-LOY){dy=-DY;yy=wy-LOY;}
OnPaint();hDC=GetDC(hWnd);BitBlt(hDC,xx-SIZEX/2,yy-UPY,SIZEX,SIZEY,hmDC,0,0,SRCCOPY);ReleaseDC(hWnd,hDC);
#ifndef DEBUG
}
#endif
break;
default: return DefWindowProc(hWnd,uMsg,wP,lP);}return 0L;}
0155wkitty
NGNGいまいち理解していなくて、参考にしているおソースを参考に修正してみました。
これで描画できるでしょうか?
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGこのスレがソース垂れ流しも可能なオナニースレだからでしょう。
0158wkitty
NGNG昔は NetNews という BASE64 でソース添付して PDS 公開する場があった。
今はどこのプロバイダも帯域浪費して S/N 比が悪く、不毛な議論が多くて
恩恵を受けるユーザが多いか少ないか判らない NNTP をサービスしたがらない。
俺の入ってるプロバイダもニュースサーバ立ってない。
で、ま、今の俺にとっては S/N 比の点と無秩序な所と閲覧者の数の多さの点で
2ch が NetNews の代わりかな、と。
どっかにまとめてうpしても見てくれる人が少ないんで。
このスレがソース垂れ流し可能なオナニースレだからってのも正解です。
0159デフォルトの名無しさん
NGNGfjやめてrec.*/alt.*に移行しろ
0160デフォルトの名無しさん
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1032435179
0161デフォルトの名無しさん
NGNGログにとって持ち歩く(w こともできんので、
ここに張ってほしいわ。
0162デフォルトの名無しさん
NGNG変わりないと思うが。
0163wgiko.c
NGNGhttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1032435179
ギコ猫が回ります。
wkitty からの改良点は、耳の部分の円錐に対応した事(描画ルーチン)、
最初ゆっくり回って徐々に限界まで加速し、その時の1秒あたりの描画数を表示する事(WndProc関数)です。
0164デフォルトの名無しさん
NGNGハゲ同
個人的にlisp44行は見たかった。
http://pc3.2ch.net/test/read.cgi/tech/1033220509/
でうp頼むよ。
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG禿しく同意。
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています