七行プログラミング
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGDVDのプロテクトを解除するプログラムを作成!
我々も負けてはいられません!
ルール:七行なら言語は問いません。では、どうぞ!
0002デフォルトの名無しさん
NGNG・動作環境 MS-DOS プロンプト
1>class Suzuki {
2> public static void main(String args[]) {
3> while (true) {
4> System.out.print( System.in ) ;
5> }
6> }
7>}
0003SAGE
NGNG2>
3> int main()
4> {
5> printf( "Hello, World!" );
6> return 0;
7> }
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG1>cli
2>hlt
3>nop
4>nop
5>nop
6>nop
7>nop
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG卯津だ・・
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG>DVDのプロテクトを解除するプログラムを作成!
このコードが気になる。だれかあぷして。
0010アンノウン名無しさん
NGNGhttp://piza.2ch.net/test/read.cgi?bbs=tech&key=983191866&ls=50
0011デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG#!/usr/bin/perl -w
# 526-byte qrpff, Keith Winstein and Marc Horowitz <[email protected]>
# MPEG 2 PS VOB file on stdin -> descrambled output on stdout
# arguments: title key bytes in least to most-significant order
$_='while(read+STDIN,$_,2048){$a=29;$c=142;if((@a=unx"C*",$_)[20]&48){$h=5;
$_=unxb24,join"",@b=map{xB8,unxb8,chr($_^$a[--$h+84])}@ARGV;s/...$/1$&/;$d=
unxV,xb25,$_;$b=73;$e=256|(ord$b[4])<<9|ord$b[3];$d=$d>>8^($f=($t=255)&($d
>>12^$d>>4^$d^$d/8))<<17,$e=$e>>8^($t&($g=($q=$e>>14&7^$e)^$q*8^$q<<6))<<9
,$_=(map{$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;$t
^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]}(16..271))
[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]}print+x"C*",@a}';s/x/pack+/g;eval
[Hot Wired - 7行でDVD暗号を解読するプログラム]
http://www.hotwired.co.jp/news/news/technology/story/20010308302.html
0014デフォルトの名無しさん
NGNG誰かインデントしてみてくれ。
0015perl初心者
NGNGそれでSTDINから$_に2048バイトずつ読み込んで、$a=29,$c=142、
ifのなかで、@aに$_の内容をunsigned charの配列にして読み込み、
その21番目と48と論理積とって偽ならそのまま出力、真なら$h=5,
$_と@aの80番目のXORをとってその下8ビット・・・むきーーーー
0016デフォルトの名無しさん
NGNGさいてー、プププ
0017デフォルトの名無しさん
NGNG{
$a = 29;
$c = 142;
if ((@a = unpack("C*",$_))[20] & 48)
{
$h = 5;
$_ = unpack(b24,join("",@b = map
{
pack(B8,unpack(b8,chr($_^$a[--$h+84])))
}
@ARGV ));
s/...$/1$&/;
$d = unpack(V,pack(b25,$_));
$b = 73;
$e = 256 | (ord($b[4])) << 9 | ord($b[3]);
$d = $d>>8^($f = ($t = 255)&($d>>12^$d>>4^$d^$d/8))<<17,
$e = $e>>8^($t&($g = ($q = $e>>14&7^$e)^$q*8^$q<<6))<<9,
$_ = (map
{
$_%16or$t^=$c^=($m=(11,10,116,100,11,122,20,100)[$_/16%8])&110;
$t ^=(72,@z=(64,72,$a^=12*($_%16-2?0:$m&17)),$b^=$_%64?12:0,@z)[$_%8]
}
(16..271) )[$_]^(($h>>=8)+=$f+(~$g&$t))for@a[128..$#a]
}
print pack("C*",@a)
}
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG>さいてー、プププ
否定はしないよ。あっちのメガデモ関係とか見てると鬱になるよな。
0022デフォルトの名無しさん
NGNG技術云々って言うか、暇な奴が多いってことだろうけど。
日本のプログラマは搾取対象なので、趣味でなんか作る暇も無い。
(そういう風にプログラマを使ってる糞会社のせい。)
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG凄いことだろ
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNG0027いつでもどこでも名無しさん
NGNGテクノポリス別冊 プログラム・ポシェット
に投稿してました。
0028五郎
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG003121
NGNG0032トリッキーの1
NGNGすなわち砂嵐シミュレータを作ってみました。ざーっていうあれです。音は鳴らないけど。
言語はC+APIです。VisualC++6でコンパイル確認、Win2kと98で動作確認しました。
かな〜り削り取ったつもりですが、#include含めて13行もあります。
#include <Windows.h>
int i,r,a=640,b=400;long t[11]={40,640,400,2097153};char*k,y[0xfa000];long
WINAPI WndProc(HWND d,UINT m,UINT w,long l){PAINTSTRUCT p;switch(m){case 15:
HBITMAP q;HDC e;e=CreateCompatibleDC(BeginPaint(d,&p));GetDIBits(e,(q=
CreateCompatibleBitmap(p.hdc,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;
k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y
,(BITMAPINFO*)t,0);DeleteObject(q);DeleteDC(e);EndPaint(d,&p);InvalidateRect
(d,0,0);return 0;case 2:PostQuitMessage(0);}return DefWindowProc(d,m,w,l);}int
WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w;w.style=3;w
.lpfnWndProc=WndProc;w.cbWndExtra=w.cbClsExtra=0;w.lpszMenuName=0;w.hIcon=0;w.
hbrBackground=0;w.hCursor=LoadCursor(0,IDC_ARROW);w.lpszClassName="Tax's";w.
hInstance=i;RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99,
99,a,b,0,0,i,0),n);while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}
あと1行くらいは何とかなるかもしれないけれど、7行はちょっと……
オリジナルの、まともな変数名なコードを読みたいという人がもしいれば公開します。
あと、「俺ならここはこうする」という人がいれば是非是非教えてください。
0033このスレの1
NGNG003516進数スレより
NGNGint main(){
FILE *stream = fopen( "temp.txt", "w" );int giko, hahaha;
for( giko = 0; giko <= 0xF; giko++ ){fprintf( stream, "%x│", giko );
for( hahaha = 0; hahaha <= 0xF; hahaha++ )
fprintf( stream, " %x", giko & hahaha );
fprintf( stream, "\n" );}fclose( stream );}
0036デフォルトの名無しさん
NGNGまじで凄くねぇ?これ・・・
0037デフォルトの名無しさん
NGNG必要最低限のものが詰まってる感じだな
0038SAGE
NGNG11行にはなったけど…7行はツラいなぁ。
// 無意味にC++。VC++6依存かも。
#include <windows.h>
PAINTSTRUCT p;HBITMAP q;HDC e;char*k,y[1<<20];int a=640,b=400,i,t[11]={40,a,b,
2097153},r;long WINAPI f(HWND d,UINT m,UINT w,long l){if(m==15){GetDIBits((e=
CreateCompatibleDC(BeginPaint(d,&p))),(q=CreateCompatibleBitmap(p.hdc,a,b)),0,
b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;
SetDIBitsToDevice(p.hdc,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q);
DeleteDC(e);return !InvalidateRect(d,0,!EndPaint(d,&p));}if(m==2)
PostQuitMessage(0);return DefWindowProc(d,m,w,l);}int WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int n){WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0,
"Tax's"};RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99,99,a
,b,0,0,i,0),n);for(MSG m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}
0039デフォルトの名無しさん
NGNGimport java.awt.*;import java.awt.image.*;import java.util.*;public class Noise
extends Canvas{int P=256;byte[]c=new byte[P];int W=320;int H=240;byte[]p=new
byte[W*H];MemoryImageSource s;Image image;Random r=new Random();public Noise(){
for(int i=0;i<P;i++)c[i]=(byte)r.nextInt();s=new MemoryImageSource(W,H,new
IndexColorModel(8,P,c,c,c),p,0,W);s.setAnimated(true);image=createImage(s);}
public void update(Graphics g){for(int i=0;i<W*H;i++)p[i]=(byte)r.nextInt();s.
newPixels(0,0,W,H);g.drawImage(image,0,0,null);repaint(20);}public void paint(
Graphics g){update(g);}public Dimension getPreferredSize(){return new Dimension(
W,H);}public static void main(String[]a){Frame f=new Frame("Noise");Noise n=new
Noise();f.add(n);f.pack();f.setVisible(true);}}
32氏にならって作成。
Javaアプリケーション。
3行オーバー。
APIの使い方ちゃうねん。
レイアウトめんどい。
終了はCTRL+Cで(駄目すぎ)。
はっきり言って面白くない。
他の題材を探してこようと思う。
004039
NGNGやはりPerlしかあるまいか。
0041トリッキーの1
NGNGやっぱ他人の目は大切だな。何で気付かない?という所でだいぶん無駄がありましたね。
3行目が処理系依存なのが残念ですが、修正しても多分11行に収まりそうです。
最適化ありがとうございます。随分参考になりました。
>>40
Javaは言語が綺麗ですからね。import文はいいなぁ……(笑)
0042デフォルトの名無しさん
NGNG16,7,8歳頃ってハッカーとして一番の成長期だと思う。
なのに、日本の高校生は受験に追われ、PCとネットに(特にネットに)触れる機会が
少ないので、諸外国と比べハッカーが育ちにくいというのは、憂うべき状況だな。
0043デモスレ住人
NGNG#include<windows.h>typedef void*v;typedef int i;i a=640,b=400,t[11]={40,640,400
,2097153},r;char*k,y[1<<25];HDC h,e;WINAPI w(v d,i m,i w,i l){if(m==15){v q=
CreateCompatibleBitmap(h,a,b);GetDIBits(e=CreateCompatibleDC(0),q,0,b,0,(v)t,0)
;for(k=y;k<y+a*b*4;k+=4)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(h,0,0,
a,b,0,0,0,b,y,(v)t,0);DeleteObject(q);DeleteDC(e);InvalidateRect(d,0,0);return
0;}return(m==2)?PostQuitMessage(0),0:DefWindowProc(d,m,w,l);}WNDCLASS c={0,(v)w,
0,0,(v)(1<<22),0,0,0,0,"."};WINAPI WinMain(v i,v x,v y,i z){MSG m;RegisterClass
(&c);h=GetDC(CreateWindow(".","頑張ってみたけど9行が限界かなぁ",37066<<16|32,
99,99,a,b,0,0,i,0));while(GetMessage(&m,0,0,0))DispatchMessage(&m);return 0;}
0044デフォルトの名無しさん
NGNGプ。ちょうどその期間だけポッカリとブランクがあるんですけれど。
0045名無しさんi486
NGNG0046>39
NGNGN.java
import java.awt.*;import java.awt.image.*;import java.util.*;class N extends
Frame{int W=320,H=240,P=256;byte[]c=new byte[P],p=new byte[W*H];
MemoryImageSource s;Image im;Random r=new Random();int i;N(){for(i=0;i<P;i++)c
[i]=(byte)r.nextInt();s=new MemoryImageSource(W,H,new IndexColorModel(8,P,c,c,c
),p,0,W);s.setAnimated(true);im=createImage(s);setSize(W,H);setVisible(true);}
public void update(Graphics g){for(i=0;i<W*H;i++)p[i]=(byte)r.nextInt();s.
newPixels(0,0,W,H);g.drawImage(im,0,0,null);repaint(20);}public void paint(
Graphics g){update(g);}static void main(String[]a){new N();}}
0047デフォルトの名無しさん
NGNGなんで?1行80文字以下の制限があるのに?プ
0048デフォルトの名無しさん
NGNG004943
NGNG#include<windows.h>typedef void*v;typedef int i;i a=640,b=400,t[11]={40,640,480
,2097153},r;char*k,y[1<<25];v h,m=y;WINAPI w(v d,i m,i w,i l){if(m==15){v q=Cr\
eateCompatibleBitmap(h,a,b);GetDIBits(h,q,0,b,0,(v)t,0);for(k=y;k<y+a*b*4;k+=4\
)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(h,0,0,a,b,0,0,0,b,y,(v)t,0);\
DeleteObject(q);return InvalidateRect(d,0,0);}if(m==2)ExitProcess(0);return De\
fWindowProc(d,m,w,l);}WINAPI WinMain(v i,v x,v y,i z){v c[]={0,(v)w,0,0,(v)(1<\
<22),0,0,0,0,"."};RegisterClass((v)c);h=GetDC(CreateWindow(".","2ch",37066<<16|
32,99,99,a,b,0,0,i,0));while(GetMessage(m,0,0,0))DispatchMessage(m);return 0;}
0050デフォルトの名無しさん
NGNG0051トリッキーの1
NGNGコンパイル出来なかったですが(Cコンパイラだとinclude以外は可能かな?)
参考になる部分は多かったです。文末の\はしらなかった。
WM_PAINTでBegin/EndPaintを呼ばなくてもいいんでしたっけ?
Windows3.1だと飛んでしまった記憶があるんですが、今試してみると
上手く動いてそうに見えます。MSDNにも「呼べ」って書いてないし。
最終的に10行になりました。後1行なら何とかなるでしょうが、
速度を維持したまま7行は絶対無理だと確信しました(笑)。
今回のはBegin/EndPaint問題も回避して、DCも毎回解放し、
何より全ての行が78文字以上なので等角フォントでみると
とても美しく見えます。俺としては満足です。
皆さんのコードはとても参考になりました。ありがとうございます。
#include <Windows.h>
HBITMAP q;HDC e,v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r
;long WINAPI f(HWND d,UINT m,UINT w,long l){c=DefWindowProc(d,m,w,l);if(m==2)
PostQuitMessage(0);if(m==15){GetDIBits((v=GetDC(d)),(q=CreateCompatibleBitmap(
v,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9
+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,(BITMAPINFO*)t,0);DeleteObject(q
);InvalidateRect(d,0,0);ReleaseDC(d,v);}return c;}int WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int n){MSG m;WNDCLASS w={3,f,0,0,i,0,LoadCursor(0,IDC_ARROW)
,0,0,"Tax's"};RegisterClass(&w);ShowWindow(CreateWindow("Tax's","2ch",1<<19,99
,99,a,b,0,0,i,0),n);for(m;GetMessage(&m,0,0,0);DispatchMessage(&m));return 0;}
005246
NGNGN.java
import java.awt.*;import java.awt.image.*;import java.util.*;class N extends
Frame{int W=320,H=240;byte[]p=new byte[W*H];MemoryImageSource s;Image m;Random
r=new Random();void b(){for(int i=0;i<W*H;i++)p[i]=(byte)r.nextInt();}N(){b();s
=new MemoryImageSource(W,H,new IndexColorModel(8,256,p,p,p),p,0,W);
s.setAnimated(true);m=createImage(s);setSize(W,H);setVisible(true);}public void
update(Graphics g){b();s.newPixels();g.drawImage(m,0,0,null);repaint(20);}
public void paint(Graphics g){update(g);}static void main(String[]a){new N();}}
0053駄目プログラマ
NGNGint WINAPI WinMain (HANDLE hI,HANDLE hP,LPSTR lp,int n)
{
RECT g;DWORD i=-1;HDC hdc = GetDC(0);GetWindowRect(GetDesktopWindow(), &g);
while(i--)SetPixel(hdc,rand()%g.right,rand()%g.bottom,rand());
ReleaseDC(0,hdc);return 0;
}
ほらよ、7行砂嵐プログラム。WIN32用でCな。win98meで動作確認。win2kは未確認。
ほっとけば いつか終了(藁。 我慢できなくなったらタスク終了しとけ。
0054デフォルトの名無しさん
NGNG見るからに動かしてみたくないぞ(藁
0055デフォルトの名無しさん
NGNGなんだって最終的に1行にできるよ。
0056デフォルトの名無しさん
NGNG用意されてるものだけで書くのが面白いんだろ。
0057デフォルトの名無しさん
NGNGこれはすげえ。これだけのコードの短さを保ちながら、WNDCLASS部分などの
エラーチェック以外はほぼ完璧だ。しかも鬼門のDIBits関連APIをいじりながら、
描画アルゴリズムも最適化されてる。それでこの速度が達成出来るのか、うーむ。
いい勉強をさせられた。久々に他人のソースを見て感動したよ。
0058デフォルトの名無しさん
NGNG>WM_PAINTでBegin/EndPaintを呼ばなくてもいいんでしたっけ?
呼ばなくてもいいけど、そのときはDefWindowProc()に処理を回さないとだめ。
DefWindowProc()が代わりにBegin/EndPaintを呼んでくれる。
WM_PAINTでBegin/EndPaintを呼ばずにreturnすると、無限ループになるよ。
005957
NGNG51さんはちゃんとその周りの処理も出来ているよ。
先にDefWindowProcを呼んで、その後で個別処理をしている。
ちなみにBegin/EndPaintを呼ばないと無限ループというのは間違いで、
WM_PAINTが絶え間なく呼ばれ続けるだけのはず。
今回の様なプログラムならそれを逆手にとって
InvalidateRectを呼ばない方法も考えられるね。
(そうするとまた少しコードが短くなる(笑))
でもそれは本来正しいプログラムではないので、51さんの方法がベストでしょう。
0060デフォルトの名無しさん
NGNGもう1行いけそう
#include <windows.h>
HBITMAP q;HDC e,v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r;
int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){int m[7];WNDCLASS w={67,De\
fWindowProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);ShowWindow(CreateWindow("1",0,
1<<19,0,0,a,b,0,0,i,0),1);while(GetMessage((MSG*)m,0,0,0)){DefWindowProc((HWND)
m[0],m[1],m[2],m[3]);if(m[1]==513)return 0;if(m[1]==15){GetDIBits((v=GetDC((HW\
ND)m[0])),(q=CreateCompatibleBitmap(v,a,b)),0,b,0,(BITMAPINFO*)t,0);for(k=y;k<y
+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,
y,(BITMAPINFO*)t,0);DeleteObject(q);InvalidateRect((HWND)m[0],0,0);}}}
006160
NGNGウインドウを閉じると、メモリにゴミが残りますw
スタイル変更したほうがよかったな。
0062デフォルトの名無しさん
NGNGふ〜ん。Javaの方が短いけれどずいぶんスッキリしているなあ
0063デフォルトの名無しさん
NGNG大学に行ったらこんな凄いプログラムつくってみたいです
0064名無しでGO!
NGNG006560
NGNG#include <windows.h>
HBITMAP q;HDC v;char*k,y[1<<20];int a=640,b=400,c,i,t[11]={40,a,b,1572865},r;W\
INAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){int m[7];WNDCLASS w={67,DefWind\
owProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);ShowWindow(CreateWindow("1",0,1<<19
,0,0,a,b,0,0,i,0),1);while(GetMessage((MSG*)m,0,0,0)){w.lpfnWndProc((HWND)m[0],
m[1],m[2],m[3]);if(m[1]==513)break;if(m[1]==15){v=GetDC((HWND)m[0]);for(k=y;k<y
+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,
y,(BITMAPINFO*)t,0);DeleteObject(q);InvalidateRect((HWND)m[0],0,0);}}return 0;}
0066>64
NGNG0067トリッキーの1
NGNG情報tnxです。
59さん、確かにコレを利用するとかなり短く書けますね。
>>60
うーん、怖い。メッセージループ内で処理する場合、
SendMessageで送られたメッセージなどが
直接プロシージャにまわされてしまうので、
この例では例えばWM_DESTROYなどが処理できないはずです。
しかし、今思いついたんですが、GetMessageの返す
エラーメッセージを利用する方法がありますね。
というわけで>>58-60さんを参考にして書いてみました。
これも8行ですが、ちゃんと終了出来ます。
メモリはOSが解放してくれることを期待しています。
#include <Windows.h>
HBITMAP q;char*k,y[1<<20];int a=640,b=400,r,m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;int WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={3,DefWi\
ndowProc,0,0,i,0,LoadCursor(0,IDC_ARROW),0,0,"T"};RegisterClass(&w);HDC v=Get\
DC(g=CreateWindow("T","2ch",268959744,99,99,a,b,0,0,i,0));q=CreateCompatibleB\
itmap(v,a,b);while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){GetDIBits(v,q,0
,b,0,&t,0);for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToD\
evice(v,0,0,a,b,0,0,0,b,y,&t,0);}else DispatchMessage((MSG*)m);}return 0;}
7行が見えてきましたね(笑)
0068トリッキーの1
NGNG>>62
美しい言語である上、比較的簡単にグラフィックをさわれますからね。
>>63
これは悪い例です。というか、パズルみたいな物です。参考にしてはいけません。
確かに私は大学生ですが、普段こんな狂ったコードを書いているわけではありません。
>>64
他に適した言語がなかなか見つからないんですが、心当たりありますか?
使ったこと無いけれど、HSPとかだと簡単なのかな?
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGプログラム組んだことないのですが
はじめからC++って大丈夫ですか??
C言語知らなくてもC++の入門書読んでも大丈夫ですか??
007160
NGNG>メモリはOSが解放してくれることを期待しています。
CS_CLASSDC か CS_OWNDC指定しておけば平気だと思う。
この例だと
WNDCLASS w = {67, ...
かな
0072トリッキーの1
NGNGなるほど、名案!素晴らしい。
ちなみに>>67は、WM_PAINTが外から投げられると画面の更新を止めます。
その可能性は結構大きいので、バグプログラムだと言えるでしょう。悲しい。
>>70
すみません、スレ違いなので別の場所で会えれば……
007360
NGNG>警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。
>while (GetMessage(lpMsg, hWnd, 0, 0)) ...
おぃ、どういうことだよ。
今までのサンプルってなんなんだ?
0074トリッキーの1
NGNG-1を返しても、メッセージは大抵取れています。
Windows3.1の名残なのか、hwnd==NULLの場合でも正常に動作します。
ただこの場合、頻繁にエラーの-1が返されるようです。
しかし、本当にエラー(Windowが消滅した、など)を返してきた場合
対応できないので、>>67ではわざわざhwndを設定してエラーが出ないようにし、
その代わりエラーが返ってきたら(必ずいつか返ってくる)強制終了しています。
007560
NGNG7行到達w
Cだとプリプロセッサというウザイものがあるから難しいねw
>>67を参考に。
#include <windows.h>
HDC v;char*k,y[1<<20];int a=640,b=400,c,i,r, m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){ WNDCLASS w={67,DefWind\
owProc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);v=GetDC(g=CreateWindow("1",0,26895\
9744,0,0,a,b,0,0,i,0));while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){for(k=
y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0
,0,b,y,&t,0);}elseDispatchMessage((MSG*)m);}return 0;}
0076トリッキーの1
NGNG恥ずかしい……まさかこんな大穴を見落としていたとは。
確かにここまできたらGetDIBitsをする意味は全くないですね。
ちょっと惜しいのは、ウィンドウをドラッグすると更新が止まってしまう事です。
↓はそれを修正したInvalidateRectを呼ぶバージョンです。あとちょっと手を入れてあります。
#include <Windows.h>
char*k,y[1<<20];int a=640,b=400,c,r,m[8];BITMAPINFO t={40,a,b,1,24};HWND g;WI\
NAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindowProc,0,0
,i,0,0,0,0,"T"};RegisterClass(&w);HDC v=GetDC(g=CreateWindow("T","2ch",513<<19
,99,99,a,b,0,0,i,0));while(GetMessage((MSG*)m,g,0,0)!=-1){if(m[1]==15){for(k=y
;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0
,0,b,y,&t,0);}else DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}return 0;}
しかし60さん、メッセージループといい素晴らしい目の付け所です。
60さんがいなければ7行達成出来ませんでしたね。今回はホントに勉強になりました。
007860
NGNGむむっ、こっちも別のアプローチで完成w
InvalidateRect呼ばないけど、ちょっとずるしてその辺解決。
#include <windows.h>
HDC v;char*k,y[1<<20];int a=640,b=400,c,i,r, m[8];BITMAPINFO t={40,a,b,1,24};H\
WND g;WINAPI WinMain(HINSTANCE i,HINSTANCE,LPSTR,int){WNDCLASS w={67,DefWindow\
Proc,0,0,i,0,0,0,0,"1"};RegisterClass(&w);v=GetDC(g=CreateWindow("1",0,2689597\
44,0,0,a,b,0,0,i,0));for(;;){if(PeekMessage((MSG*)m,0,0,0,1))DispatchMessage((
MSG*)m);else{if(!IsWindow(g))return 0;for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(
r=r*9+5)>>16;SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,&t,0);}}}
0079トリッキーの1
NGNGああなるほど。良くあるOnIdleの形ですね。
どちらの手法でも最終的にCPUを喰いまくるので(笑)
OKでしょう。
……そろそろ次のネタの時期ですね。
フルスクリーンのラスタースクロールとか(笑)
0080トリッキーの1
NGNG自己レス
>最終的に10行になりました。後1行なら何とかなるでしょうが、
>速度を維持したまま7行は絶対無理だと確信しました(笑)。
今日の昼の発言。なんといい加減な確信だ(鬱)
0081デフォルトの名無しさん
NGNG0082トリッキーの1
NGNG008381>82
NGNG008760
NGNG俺もアレに触発されてやってみたわけだし。
008852
NGNGJavaの方が短いけれどわかりやすい。
・・・、というかWin32 APIよくわからないだけかも・・・。
乱数使うときはRandom#nextInt()を使ったほうが高速なんですね。
今までMath.random()使っていたけれど実はMath.random()が重いということを
知った今日この頃。
# Random#nextInt()はintだしねー
008960
NGNG最後におまけで整理した行連結(\)なしバージョン
#include <windows.h>
char*k,y[1<<20];int a=640,b=400,c,r;BITMAPINFO t={40,a,b,1,24};WINAPI WinMain(
HINSTANCE i,HINSTANCE,LPSTR,int){MSG m;WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0
,0,"1"};RegisterClass(&w);HWND g=CreateWindow("1",0,268959744,0,0,a,b,0,0,i,0);
HDC v=GetDC(g);for(;;){if(PeekMessage(&m,0,0,0,1))DispatchMessage(&m);else{if(!
IsWindow(g))return 0;for(k=y;k<y+a*b*3;k+=3)*k=*(k+1)=*(k+2)=(r=r*9+5)>>16;
SetDIBitsToDevice(v,0,0,a,b,0,0,0,b,y,&t,0);}}}
0090デフォルトの名無しさん
NGNG009160
NGNG元絵を作る時点で7行超えてるし(鬱
0093デフォルトの名無しさん
NGNGdd 10cd13b0h,0c38ea0b7h,193740e4h,0f8e2aac7h,8626c031h,0f2e94105h,0ffh
0094トリッキーの1
NGNGそれは7行スレよりトリッキースレでしょう。
お待ちしております(笑)
>>91
骨格だけ作ってみました。10行です。最適化していないのでコード的に無駄だらけです(tとか)。
ここから出発するのはやめた方がいいかもしれません。BitBltは良くない。
とはいえ、Get/PutDIBitsを使うのもいまいち良くないですし。
いっそのこと、Windowの形態を無くしてしまうのも手かも……
その場合終了方法が問題です。
フルスクリーン ラスタースクロール
#include <windows.h>
#include <math.h>
HDC v,d,e;HWND g;int n,f,t[10]={40,0,0,1572865},m[8];WINAPI WinMain(HINSTANCE
i,HINSTANCE,LPSTR,int){t[1]=GetSystemMetrics(0);t[2]=GetSystemMetrics(1);
WNDCLASS w={67,DefWindowProc,0,0,i,0,0,0,0,"Lus"};RegisterClass(&w);v=GetDC(g=
CreateWindow("Lus",0,WS_VISIBLE|WS_POPUP,0,0,t[1],t[2],0,0,i,0));d=GetDC(0);
SelectObject(e=CreateCompatibleDC(d),CreateCompatibleBitmap(d,t[1],t[2]));
BitBlt(e,0,0,t[1],t[2],d,0,0,SRCCOPY);while(GetMessage((MSG*)m,g,0,0)!=-1){if
(m[1]==15)for(n=0;n<t[2];n++)BitBlt(v,sin(n*3.0/t[2])*sin((f++)/40.0)*60,n,t[1
],1,e,0,n,SRCCOPY);DispatchMessage((MSG*)m);InvalidateRect(g,0,0);}return 0;}
0095デフォルトの名無しさん
NGNG0096デフォルトの名無しさん
NGNGなんでこの行数でこんな事が出来るんだ・・
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGRubyじゃ無理だな。
0100デフォルトの名無しさん
NGNGおいおい、(約)7行っていう縛りがあるから面白いんじゃないの?
50行×79字なんて掲示板には適さないし、研ぎの魅力が半減だ。
010138
NGNG…というネタを振ろうと思って試しに作ってみたら出来ちゃった。
#include <stdio.h>
main(int C,char**V){FILE*r,*w;int c,p=-1,l=1;if(C==4){r=fopen(V[2],"rb");if(r)
{w=fopen(V[3],"wb");if(*V[1]-'x'){while((c=getc(r))-EOF){if(p-c||l==255){if(l-
1)putc(p,w),putc(l,w);putc(c,w),l=0;}l++,p=c;}if(l-1)putc(p,w),putc(l,w);}else
{while((c=getc(r))-EOF){if(c==p){l=getc(r);while(l--)putc(p,w);if(EOF==(c=getc
(r)))break;}else if(p+1)putc(p,w);p=c;}}fclose(r);fclose(w);}}else puts(
"usage: [a|x] [file_in] [file_out] (a:compress, x:expand)");return 0;}
# ただしただのRLEなので単色ビットマップとか以外はむしろサイズ増えるかも(^^;
■ このスレッドは過去ログ倉庫に格納されています