C言語でダイナミックな花火を書く方法
C 言語でダイナミックな花火を記述する方法: 最初にテキストを表示するためのメニュー インターフェイスを描画し、次に花火の上昇段階と爆発段階を設定し、花火と花火爆弾の構造を定義し、最後にデータを初期化し、ロードします。リソース マップを作成し、ランダムに起動します。番号はランダムです。
ダイナミックな花火をC言語で書く方法:
エフェクト表示
動的グラフ
全体的なフレームワーク
/***************************************** * 项目名称:浪漫烟花 * 项目描述:贴图 * 项目环境:vs2019 * 生成日期:2020-9-7 * 作者所属:追梦 *****************************************/#include<graphics.h>#include<stdio.h>#include<stdlib.h>#include<windows.h>#define NUM 10 //烟花弹个数,烟花//烟花弹struct jet{ int x, y; //烟花弹坐标 int hx, hy; //烟花弹最高点坐标 bool shoot; //烟花弹是否处于发射状态 DWORD t1, t2, dt; //发射时间 引爆时间 间隔时间 IMAGE img[2]; //2张图片 一明一暗 01下标 byte n : 1; //C结构体 位段 //n 变量 1个位 0,1 n++ 0,1,0,1}jet[NUM]; //烟花弹个数//烟花struct Fire{ int x, y; //烟花的坐标 int r; //烟花的半径 int max_r; //烟花的最大半径 int cen_x, cen_y; //中心距左上角的距离 int width, height; //长宽 int xy[240][240]; //重要,像素,矩阵 bool draw; //画出 bool show; //显示 DWORD t1, t2, dt; //发射时间 引爆时间 间隔时间}fire[NUM];//初始化函数void FireInit(){}//加载资源void Load(){}//选择烟花弹void ChoiceJet(){}//判断发射void Shoot(){}//显示烟花void ShowFire(){}//菜单界面void welcome(){}//主函数int main(){ //初始界面(1000,600) initgraph(1000, 600); welcome(); Load(); while (1) { ChoiceJet(); Shoot(); ShowFire(); } system("pause"); return 0;}</windows.h></stdlib.h></stdio.h></graphics.h>
論理関係
まず、テキストを表示するメニュー インターフェイスを描画します。花火には上昇ステージと爆発ステージがあり、これによって花火と花火爆弾の構造が決まります。
花火: 座標位置、爆発半径、最大半径、中心から左上隅までの距離、長さと幅、ピクセル、時間など。
花火:座標位置、最高点、打ち上げの有無、時間、個数など。
初期化データ。リソースマップをロードします。ランダムな発射数はランダムです。
ソースコード
/***************************************** * 项目名称: 浪漫烟花 * 项目描述:贴图 * 项目环境:vs2019 * 生成日期:2020-9-7 * 作者所属:追梦 *****************************************/#include<graphics.h>#include<time.h>#include<stdlib.h>#include<math.h>#include<windows.h>#pragma comment(lib,"winmm.lib")#define NUM 10 //烟花弹个数,烟花#define PI 3.1415925//烟花弹struct jet{ int x, y; //烟花弹坐标 int hx, hy; //烟花弹最高点坐标 bool shoot; //烟花弹是否处于发射状态 DWORD t1, t2, dt; //发射时间 引爆时间 间隔时间 IMAGE img[2]; //2张图片 一明一暗 01下标 byte n : 1; //C结构体 位段 //n 变量 1个位 0,1 n++ 0,1,0,1}jet[NUM]; //烟花弹个数//烟花struct Fire{ int x, y; //烟花的坐标 int r; //烟花的半径 int max_r; //烟花的最大半径 int cen_x, cen_y; //中心距左上角的距离 int width, height; //长宽 int xy[240][240]; //重要,像素,矩阵 bool draw; //画出 bool show; //显示 DWORD t1, t2, dt; //发射时间 引爆时间 间隔时间}fire[NUM];</windows.h></math.h></stdlib.h></time.h></graphics.h>
初期化関数
void FireInit(int i){ //初始化烟花弹 jet[i].t1 = GetTickCount(); //GetTickCount()返回从操作系统启动到当前所经过的毫秒数。使用前包含windows.h。 jet[i].shoot = false; //未发射 jet[i].dt = 10; //上升时间 jet[i].n = 0; //初始化烟花 fire[i].show = false; //未引爆 fire[i].r = 0; fire[i].dt = 5; //上升时间 fire[i].t1 = GetTickCount(); fire[i].max_r = rand() % 50 + 100; //100-149 fire[i].cen_x = rand() % 30 + 80; //中心距左上角的距离 fire[i].cen_y = rand() % 30 + 80; // fire[i].width = 240; //宽 fire[i].height = 240; //长}
読み込み
void Load(){ //加载烟花弹 IMAGE jetimg; loadimage(&jetimg, L"./fire/shoot.jpg", 200, 50); SetWorkingImage(&jetimg); for (int i = 0; i <p>花火爆弾を選択</p><pre class="brush:php;toolbar:false">void ChoiceJet(DWORD& t1){ DWORD t2 = GetTickCount(); if (t2 - t1 > 100) //烟花弹出现的时间间隔100ms { //烟花弹个数 int i = rand() % 10; //不处于发射状态 if (jet[i].shoot == false && fire[i].show == false) { //烟花弹 jet[i].x = rand() % 1000; jet[i].y = rand() % 100 + 450; //450-549 jet[i].hx = jet[i].x; jet[i].hy = rand() % 300; //0-299 jet[i].shoot = true; //发射状态 putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT); } t1 = t2; }}
ジャッジ起動
void Shoot(){ for (int i = 0; i = jet[i].dt && jet[i].shoot == true) { putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT); if (jet[i].y >= jet[i].hy) { jet[i].n++; //闪烁 jet[i].y -= 5; } putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT); if (jet[i].y <pre class="brush:php;toolbar:false">//显示烟花void ShowFire(DWORD* pMem){ int drt[16] = { 5, 5, 5, 5, 5, 10, 25, 25, 25, 25, 55, 55, 55, 55, 55, 65 }; for (int i = 0; i = fire[i].dt && fire[i].show == true) { if (fire[i].r = fire[i].max_r - 1) { fire[i].draw = false; FireInit(i); } fire[i].t1 = fire[i].t2; // 如果该号炮花可爆炸,根据当前爆炸半径画烟花,颜色值接近黑色的不输出。 if (fire[i].draw) { for (double a = 0; a 0 && x1 0 && y1 > 8) & 0xff; int r = (fire[i].xy[x1][y1] >> 16); // 烟花像素点在窗口上的坐标 int xx = (int)(fire[i].x + fire[i].r * cos(a)); int yy = (int)(fire[i].y - fire[i].r * sin(a)); //较暗的像素点不输出、防止越界 if (r > 0x20 && g > 0x20 && b > 0x20 && xx > 0 && xx 0 && yy <p>メニューインターフェース</p><pre class="brush:php;toolbar:false">void welcome(){ setcolor(YELLOW); for (int i = 0; i <p>メイン機能</p><pre class="brush:php;toolbar:false">int main(){ //初始界面(1000,600) initgraph(1000, 600); //初始化种子 srand((unsigned int)time(NULL)); //音乐 爱的翅膀 mciSendString(L"open ./fire/bk1.mp3 alias music", 0, 0, 0); //send(发送) string(字符串) mciSendString(L"play music", 0, 0, 0); //其它音乐类型 wav PlaySound() //0,0,0 音乐播放器时:播放设备,快进设备 快退 暂停 welcome(); DWORD t1 = GetTickCount(); DWORD* pMem = GetImageBuffer(); for (int i = 0; i <h1 id="マテリアル">マテリアル</h1><p>2枚の写真はfireフォルダの下に配置されます。音楽に関しては、音楽を見つけて挿入するだけで再生できます。 <br><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/052/1cf72c8ff7116152eb2b0bd02d2b2411-3.bmp" class="lazy" alt="C言語でダイナミックな花火を書く方法"><br><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/052/e224e28aabb9f24626bf28cc71eab482-4.jpg" class="lazy" alt="C言語でダイナミックな花火を書く方法"></p><h1 id="概要">概要</h1><p>グラフィック ライブラリをインストールし、関連する知識を理解する必要があります。マテリアル パスは正しく書かれていなければなりません。そうでないと、無効。 </p><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-10218d227c.css" rel="stylesheet"><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-6aa8c38f9a.css" rel="stylesheet"><svg xmlns="http://www.w3.org/2000/svg" style="max-width:90%"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg><blockquote><p>#関連する学習に関する推奨事項: <strong></strong><a href="https://www.php.cn/course/list/37.html" target="_blank">C ビデオ チュートリアル<strong></strong></a>#</p></blockquote>
以上がC言語でダイナミックな花火を書く方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









C言語データ構造:ツリーとグラフのデータ表現は、ノードからなる階層データ構造です。各ノードには、データ要素と子ノードへのポインターが含まれています。バイナリツリーは特別なタイプの木です。各ノードには、最大2つの子ノードがあります。データは、structreenode {intdata; structreenode*left; structreenode*右;}を表します。操作は、ツリートラバーサルツリー(前向き、順序、および後期)を作成します。検索ツリー挿入ノード削除ノードグラフは、要素が頂点であるデータ構造のコレクションであり、近隣を表す右または未照明のデータを持つエッジを介して接続できます。

ファイルの操作の問題に関する真実:ファイルの開きが失敗しました:不十分な権限、間違ったパス、およびファイルが占有されます。データの書き込みが失敗しました:バッファーがいっぱいで、ファイルは書き込みできず、ディスクスペースが不十分です。その他のFAQ:遅いファイルトラバーサル、誤ったテキストファイルエンコード、およびバイナリファイルの読み取りエラー。

C言語マルチスレッドプログラミングガイド:スレッドの作成:pthread_create()関数を使用して、スレッドID、プロパティ、およびスレッド関数を指定します。スレッドの同期:ミューテックス、セマフォ、および条件付き変数を介したデータ競争を防ぎます。実用的なケース:マルチスレッドを使用してフィボナッチ数を計算し、複数のスレッドにタスクを割り当て、結果を同期させます。トラブルシューティング:プログラムのクラッシュ、スレッドの停止応答、パフォーマンスボトルネックなどの問題を解決します。

アルゴリズムは、問題を解決するための一連の指示であり、その実行速度とメモリの使用量はさまざまです。プログラミングでは、多くのアルゴリズムがデータ検索とソートに基づいています。この記事では、いくつかのデータ取得およびソートアルゴリズムを紹介します。線形検索では、配列[20,500,10,5,100,1,50]があることを前提としており、数50を見つける必要があります。線形検索アルゴリズムは、ターゲット値が見つかるまで、または完全な配列が見られるまで配列の各要素を1つずつチェックします。アルゴリズムのフローチャートは次のとおりです。線形検索の擬似コードは次のとおりです。各要素を確認します:ターゲット値が見つかった場合:return true return false c言語実装:#include#includeintmain(void){i

Cのカウントダウンを出力する方法は?回答:ループステートメントを使用します。手順:1。変数nを定義し、カウントダウン数を出力に保存します。 2。whileループを使用して、nが1未満になるまでnを連続的に印刷します。 3。ループ本体で、nの値を印刷します。 4。ループの端で、n x 1を減算して、次の小さな相互に出力します。

C言語データ構造:人工知能の分野における人工知能におけるデータ構造の重要な役割の概要、データ構造は、大量のデータを処理するために重要です。データ構造は、データを整理および管理し、アルゴリズムを最適化し、プログラムの効率を改善するための効果的な方法を提供します。一般的に使用されるC言語で一般的に使用されるデータ構造には、次のものが含まれます。配列:同じタイプの連続して保存されたデータ項目のセット。構造:さまざまな種類のデータを一緒に整理し、名前を付けるデータ型。リンクリスト:データ項目がポインターによって接続される線形データ構造。スタック:最後のファーストアウト(LIFO)原理に続くデータ構造。キュー:ファーストインファーストアウト(FIFO)原則に続くデータ構造。実用的なケース:グラフ理論の隣接するテーブルは人工知能です

C言語関数は、再利用可能なコードブロック、処理のパラメーターを受信し、結果を返すことです。それはスイスの陸軍ナイフに似ており、強力であり、慎重に使用する必要があります。関数には、形式の定義、パラメーター、戻り値、関数体などの要素が含まれます。高度な使用には、関数ポインター、再帰関数、コールバック関数が含まれます。一般的なエラーはタイプの不一致であり、プロトタイプの宣言を忘れています。デバッグスキルには、変数の印刷とデバッガーの使用が含まれます。パフォーマンス最適化は、インライン関数を使用します。関数設計は、単一の責任の原則に従う必要があります。 C言語関数の習熟度は、プログラミングの効率とコードの品質を大幅に向上させることができます。

C言語処理ファイルのヒントのトラブルシューティングファイルをC言語で処理するとき、さまざまな問題に遭遇する可能性があります。以下は一般的な問題であり、対応するソリューション:問題1:ファイルコードを開くことができません:ファイル*fp = fpen( "myfile.txt"、 "r"); if(fp == null){//ファイルの開く}理由:ファイルパスエラーファイルは存在しません。 Charbuffer [100]; size_tread_bytes = fread(buffer、1、siz
