• ベストアンサー

画面に絵を出す方法

やっとC言語を少し使えるようになってきました。そこで質問なのですが、画面に絵(玉など)を表示するにはどうしたらいいのでしょうか。あと、それの動かしかたなどを教えていただけないでしょうか。インターネットで探してみると、 #include <graph.h> main() { gl_openwin(-1, -1, 640, 480, 0); getchar(); gl_closewin(); } というソースがあったのですが、実行すると、ノーサーチファイルなどというエラーが出てきます。使っているコンパイラはLSI C-86 試食版です。コンパイラによって使えたり使えなかったりするヘッダファイルがあったりするのでしょうか。教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★mantis777 さんへ。 ・C 言語は始めたばかりでしたよね。  Windows 環境で画面(ウインドウ)に絵(図形)を描くには C 言語を熟知した上で  Windows の GUI(グラフィカル・ユーザ・インターフェイス)によるプログラミングを  行います。この GUI はコマンドライン(CUI)タイプとは全く別の概念が必要です。  つまりはウインドウ・メッセージ(WM_XXXX)を元に各イベントに対応する処理を  記述していきます。これがマルチタスク処理のプログラムです。 ・以前に簡単なじゃんけんゲームを紹介しましたがその中でゲーム・ループしていますよね。  Windows の GUI では単純なループを組むのは禁止です。唯一メッセージ・ループが  組める程度です。とにかく GUI のウインドウに絵(図形)を描画するには C 言語を  始めたばかりの人にとっては簡単にプログラミングできるものではありません。  理由としてはポインタ、構造体、共用体などでデータを受け取ったり、渡したりを  基本として Win32 API という関数が使われます。C 標準関数とはまた別の関数群です。 描画の仕組み: ・簡単に GUI での図形の描画方法を紹介します。  (1)WM_PAINT メッセージに以下の処理を記述。  (2)ウインドウハンドルから描画するデバイスコンテキストのハンドルを取得。  (3)描画用の Win32 API 関数を使って図形(点、線、円、長方形など)を描画。  (4)描画の終了を実行。  (5)WM_PAINT メッセージを処理したので 0 をリターンする。  上記の方法を C ソースで記述すると  case WM_PAINT:  {   // 描画の開始処理   HDC hDC = BeginPaint( hWnd, &ps );   // 図形の描画処理(点、線、円、長方形)   SetPixelV( hDC, 100, 100, RGB(255,0,0) ); // (100,100)地点に赤い点を描画   // 描画の終了処理   EndPaint( hWnd, &ps );   return 0; // リターン  }  このような感じになります。  ここで BeginPaint()、EndPaint() や SetPixelV() という関数が Win32 API の関数です。  この関数群を利用してウインドウ(画面)に図形を描画するのが基本です。 その他: ・まずは C 言語のポインタ、構造体、共用体などを完璧に理解してから Windows の  プログラミングを行って下さい。この基本がないと Win32 API の関数群を使えません。  ちなみに Windows プログラミングのお勉強サイトを紹介します。  (1)http://www.geocities.jp/ky_webid/win32c/index.html→『Win32API(C言語)編』  (2)http://wisdom.sakura.ne.jp/system/winapi/→『Win32 API入門』  (3)http://www.kumei.ne.jp/c_lang/→『猫でもわかるプログラミング』  ※(3)は『Windows SDK編 第1部』~『Windows SDK編 第4部』を読みます。  まずは上記のサイトを読みあさって下さい。  (1)のサイトでは『第9章』~『第24章』までが描画に関わるページのようです。  ここを読む前に『第0章』~『第8章』を読んだ方が良いでしょう。  ここに書かれている内容がそこそこ理解できたならばまたアドバイスします。 ・以上。(2)で紹介されている本は分かりやすいです。購入する際は本屋でチェック。

参考URL:
http://www.geocities.jp/ky_webid/win32c/index.html
mantis777
質問者

お礼

ありがとうございます。画像処理にはGUIが必要で、ポインタ、構造体、共用体をマスターしていることが条件なんですね。紹介してくださったサイトでマスターしてきます。

その他の回答 (5)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.6

高校の電気科ですか? 良いとこC言語の基本ぐらいだと思います。どちらかと言うと、WindowsアプリよりもマイコンでC言語を使ってハード制御って方向の勉強になりそうな気がします。情報処理科とかなら、まだアプリの方向を勉強するとは思いますが。 どちらにしろ高校の授業で行うレベルは実用で何かを作れるレベルには足らないレベルです。クラブ活動するか、独学で勉強しないと話になりません。 ゲーム業界で就職しているプログラマは独学でレベルを上げた人が多いですね。ゲーム専門学校で習うレベルでもゲーム会社にとっては話しにならないレベルですから。 ゲームプログラマまたは、Windowsアプリのプログラマを目指したいんでしょうか?

mantis777
質問者

お礼

ありがとうございます。三年間でC言語の基本だけで専門学校でもゲーム会社にとって話にならないのですか。独学で勉強しなければいけないんですね。目標はゲームプログラマです。がんばります。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

グラフィックを利用するゲームとなるとハードルが突然高くなります。覚悟は良いですか? 私としてのお勧めはいきなりDirectXに行ったほうが回り道しなくて良いんじゃないかと思います。その分、覚えることは沢山あります。 DirectXは、Windowsゲームの標準と言っても良いグラフィックAPIで多数の市販ゲームやXboxのゲームや個人で作るゲームまで幅広く使われています。WindowsAPIで描画するよりも高速な描画が可能で多機能です。 まず、コンパイラの環境を変更してください。DirectXを使うのに必要なコンパイラは無料で使える「Visual C++ 2005 Express Edition 日本語版」が一番導入が簡単です。まぁ、それでも大変なんですけどね。 で、DirectXを使うといいましたが敷居が高いと思うので少し敷居の低いDXライブラリから始めてみてはどうでしょうか? DXライブラリというのを使うと直接DirectXを使うよりも簡単にゲームを作成することが可能です。実際にはDirectXを使っているのですがDXライブラリが面倒なところを隠してくれます。 DXライブラリ。 http://homepage2.nifty.com/natupaji/DxLib/ Visual C++ 2005 Express EditionでDXライブラリを使う準備。 http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2005express.html DXライブラリを使ったゲームの作り方。 http://l.huu.cc/g/

mantis777
質問者

お礼

ありがとうございます。Visual C++ 2005 Express Edition 日本語版は持っているのであとはDXライブラリですね。あと、高校の電気科ではどこまで勉強するのでしょうか。

  • isle
  • ベストアンサー率51% (77/150)
回答No.4

> LSI C-86 試食版 DOSファンクションコールを使えばVGAにアクセスできますよ。 でも、 16ビットアプリでしか使えないし、 アセンブラとハードウェアの知識が要るし、 いまとなっては資料を入手するのも一苦労(というか入手不可?)だけど。

mantis777
質問者

お礼

ありがとうございます。LSI C-86 試食版は資料がないほど古いコンパイラなのですか。新しいコンパイラに変えたほうがいいのでしょうか。

  • maguro999
  • ベストアンサー率21% (59/273)
回答No.2

Cにおいてグラフィック関数やライブラリは標準な物ではありません。 環境依存です。 グラフィック関数を持っているコンパイラもあればないコンパイラもありますし コンパイラごとに誰かが作った標準ではない関数もある可能性があります。

mantis777
質問者

お礼

ありがとうございます。グラフィック関数とライブラリを手に入れればいいんですね。

  • buriburi3
  • ベストアンサー率44% (353/792)
回答No.1

グラフィック画面の操作はC言語の言語仕様には含まれていません。 グラフィックスを扱う為のAPI(WindowsであればWin32APIとかDirectXとかOpenGLとか)を使用する必要があります。 gl_openwin(-1, -1, 640, 480, 0); はStudy C http://www.vector.co.jp/soft/win95/prog/se087583.html が持っている独自のグラフィック操作関数のようです。 Study C以外では使えないと思います。 なお、LSI C-86 試食版ではWindowsリソースにアクセス出来ませんのでグラフィックスは扱えません。

mantis777
質問者

お礼

ありがとうございます。C言語で画像は扱えないんですね。あと、Study C は使えないみたいです(使っているのはXPなので)。APIというものはどういうものなのでしょうか。

関連するQ&A

  • MacのC言語について

    まずはOSXでこんな感じのでも良いから作ってみたいです http://www.orchid.co.jp/computer/cgame/exer1.gif 簡単そうに見えるんですが全然Macのサンプルが少ないのか情報がとてもわかりずらいのかよくわりません もう半年以上悩んでいて 訳が判らない状態です xcodeで http://www.orchid.co.jp/computer/cgame/ の通りスタンダートツールでC言語のmain.cに #include <graph.h> main() { gl_openwin(-1, -1, 640, 480, 0); getchar(); gl_closewin(); } を書いてウインドウを表示させてみようとしても エラーがでるし ライブラリが無いのかわからないしMacに対応しているのかさえよくわかりません C言語の質問をしてきたんですがほとんど微妙な解答ばっかりでした http://www.orchid.co.jp/computer/cgame/exer1.gif こんな感じまでやってみたいんですが xcodeを使ってここまでできるようにどなたか教えてください 御願いします

  • LSI C-86 Ver 3.30 試食版について

    プログラムを学びたいと考えており、色々コンパイラを探しています。 PC用語にまったく詳しくないのですが、色々探しているうちに、「LSI C-86 Ver 3.30 試食版」が良いと言われ、見たところ軽そうですのでこれにしようと思うのですが、 この「LSI C-86 Ver 3.30 試食版」は、c言語を勉強するのに適していますか? もし、適していなければ、お勧めのコンパイラを教えてください、お願いします。

  • ヘッダのinclude LSI試食版

    はじめまして。 よろしくお願いします。 コンパイラー:LSI C-86 Ver.3.30 試食版 OS:Windows Me includeフォルダの中にあるヘッダ以外に 新しいヘッダnew.hを \lsic330c\INCLUDEフォルダの中にいれて 1.cというファイルで #include<new.h> としてみたのですが、 コンパイル時にlcc 1.cとしてみても 1.c 1: ファイル new.hがオープンできない(No such file or directory) というエラーがでてしまいます。 よろしくお願いします。

  • LSIで画面に表示されない

    #include<stdio.h> int main(void) { int i,j; for(i=1; i<=5; i++) { for(j=1; j<=5-i; j++) { putchar(' '); } for(j=1; j<=2*i-1; j++) { putchar('* '); } putchar('\n'); } return 0; } このようなプログラムを打ってコンパイルしたんですが画面が真っ暗のままです。これはコンパイラがおかしいのでしょうか?他のはうまく表示されるんですが。ちなみに書籍名は「はじめてのCプログラミング」でコンパイラは本書付属のCD-ROM収録LSI-C(試食版)です。また繰り返しの構文(for文)ところでi=0か1にするかでずいぶんと値の振る舞いが変わるのですが…大学ではemacsを使っているのでLSIとの違いがあれば教えていただきたいです。

  • CPad for LSI C-86の実行結果

    こんにちは 現在コンパイラLSI C-86試食版と CPad for LSI C-86を使ってC言語を勉強しているのですが 何故か実行結果が表示される時とされない時があります。 内容は以下の簡単なものです。 #include <stdio.h> int main(void) { printf("Hello,world\n"); return 0; } ファイルを開いた直後などは実行結果が表示されることが多いのですが 大半(2/3ほどの確率で)の実行結果では C:\Program Files\~~~ -- Press any key to exit (Input "c" to continue) -- としか出ません。 使用OSはWindowsXPで 設定→コンパイラのパス のところと 高度な設定→実行するコマンド のところは FAQに従っています。 一体どこがおかしいのでしょうか? 回答よろしくお願いします。

  • コンパイラ「LSI-C試食版」の設定方法

    コンパイラ「LSI-C試食版」の設定方法がわからりません。manを見ても具体的に書いていなく困っています。 特に環境変数の設定のところがわかりません。 よろしくお願いします。

  • 教えてください。

    今はXPを使っているのですが、C言語をやりたいと思います。そこで、コンパイラするためのソフトで、『なるぞ☆情報処理技術者』とゆうサイトにあるLSIC-86 ver 3.30試食版(コンパイラ)とCPad for LSI C-86(エディタ)を入れようと思うのですが、CPad for LSI C-86の設定をする前にLSICを必ずインストールしてから行ってください。と書いてあるのですが、LSICのインストールの仕方とか説明が書いてないのでやり方がわかりません!分かる方、もしくは説明が載っているサイトを知っている方がいましたら、是非教えてください☆よろしくお願いします!!

  • コンパイラについて

    LSI C-86コンパイラ試食版(Ver.3.30c)を使おうとしましたが、インストールと設定がよく分かりません。 小学生にも分かるように簡単に教えてください。

  • 【C#】 C用のエディタを作りたい

    C#でC言語を記述するエディタを作成しています。 コンパイラはLSI C-86 Ver.3.30 試食版を使おうとしているのですが、 プログラムからコンパイルするやり方が知りたいです。 Textbox.textをコンパイルするとしたときのコードをご存じの方がいらっしゃいましたらどうか教えてください。 ヒント、説明しているURLなどでもかまいません。 よろしくお願いします。

  • LSI C-86試食版のコンパイルエラーが出ます:Undefined symbol : pow_

    下記のC言語のプログラムでpow関数を使っていますが、コンパイル時にエラー(Undefined symbol : pow_)がでます.この原因をご教示いただけませんか。 LSI C-86試食版を使用しています。 #include <stdio.h> #include <math.h> int main(void) { double x; double y; double z; x=2.3; y=3.3; z=pow(x,y); }

専門家に質問してみよう