raylib基础学习

raylib 是一个跨平台、易用的图形库,围绕OpenGL 1.1、2.1、3.3和OpenGL ES 2.0构建。 尽管它是用C语言编写的,却有超过50种不同语言的绑定。本教程将使用C语言。 #include <raylib.h> int main(void) { const int screenWidth = 800; const int screenHeight = 450; // 在初始化raylib之前,可以设置配置标志 SetConfigFlags(FLAG_MSAA_4X_HINT | FLAG_VSYNC_HINT); // raylib并不要求我们存储任何实例结构 // 目前raylib一次只能处理一个窗口 InitWindow(screenWidth, screenHeight, "MyWindow"); // 设置我们的游戏以每秒60帧的速度运行 SetTargetFPS(60); // 设置一个关闭窗口的键。 //可以是0,表示没有键 SetExitKey(KEY_DELETE); // raylib定义了两种类型的相机。Camera3D和Camera2D // Camera是Camera3D的一个类型化定义 Camera camera = { .position = {0.0f, 0.0f, 0.0f}, .target = {0.0f, 0.0f, 1.0f}, .up = {0.0f, 1.0f, 0.0f}, .fovy = 70.0f, .type = CAMERA_PERSPECTIVE }; // raylib支持加载各种不同的文件格式的模型、动画、图像和声音。 Model myModel = LoadModel("my_model.obj"); Font someFont = LoadFont("some_font.ttf"); // 创建一个100x100的渲染纹理 RenderTexture renderTexture = LoadRenderTexture(100, 100); // WindowShouldClose方法检查用户是否正在关闭窗口。 // 可能用的是快捷方式、窗口控制或之前设置的关闭窗口键 while (!WindowShouldClose()) { // BeginDrawing方法要在任何绘图操作之前被调用。 BeginDrawing(); { // 为背景设定某种颜色 ClearBackground(BLACK); if (IsKeyDown(KEY_SPACE)) DrawCircle(400, 400, 30, GREEN); // 简单地绘制文本 DrawText("Congrats! You created your first window!", 190, // x 200, // y 20, // 字体大小 LIGHTGRAY ); // 大多数函数都有几个版本 // 通常后缀为Ex, Pro, V // 或者是Rec、Wires(仅适用于3D)、Lines(仅适用于2D)。 DrawTextEx(someFont, "Text in another font", (Vector2) {10, 10}, 20, // 字体大小 2, // 间距 LIGHTGRAY); // 绘制3D时需要,有2D的等价方法 BeginMode3D(camera); { DrawCube((Vector3) {0.0f, 0.0f, 3.0f}, 1.0f, 1.0f, 1.0f, RED); // 绘图时的白色色调将保持原来的颜色 DrawModel(myModel, (Vector3) {0.0f, 0.0f, 3.0f}, 1.0f, // 缩放 WHITE); } // 结束3D模式,这样就可以再次普通绘图 EndMode3D(); // 开始在渲染纹理上绘图 BeginTextureMode(renderTexture); { // 它的行为与刚才调用的`BeginDrawing()`方法相同 ClearBackground(RAYWHITE); BeginMode3D(camera); { DrawGrid(10, // Slices 1.0f // 间距 ); } EndMode3D(); } EndTextureMode(); // 渲染有Texture2D字段的纹理 DrawTexture(renderTexture.texture, 40, 378, BLUE); } EndDrawing(); } // 卸载已载入的对象 UnloadFont(someFont); UnloadModel(myModel); // 关闭窗口和OpenGL上下文 CloseWindow(); return 0; } 延伸阅读 raylib有一些不错的例子 raylib的其他语言绑定 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=mlz8qfx2vlil

2022/3/6
articleCard.readMore

Lojban教程 - 逻辑语学习中常见专有名词列表

转载修改自【发布】【逻辑语常用术语的汉语专有名词列表V1.1】 常见逻辑语术语 术语语言类型 汉语专有名词 valsi 逻辑语 词 brivla 逻辑语 谓词 gismu 逻辑语 根词 lujvo 逻辑语 合成词 fu'ivla 逻辑语 借词 cmene 逻辑语 名字词 selma'o 逻辑语 结构词类 cmavo 逻辑语 结构词 indicators 英语 态度指示词 discursives 英语 转折词 connectives 英语 连词 modals 英语 介词 terminator 英语 终止词 rafsi 逻辑语 词缀 tanru 逻辑语 词组 jufra 逻辑语 句 bridi 逻辑语 谓句 selbri 逻辑语 谓语 place structure 英语 位结构 sumti 逻辑语 项 sumti 逻辑语 项标签 abstraction 英语 谓词子句 relative clause 英语 定语从句

2022/1/29
articleCard.readMore

Lojban基础教程 - 字母

字母 逻辑语使用除了h、q、w外的23个拉丁字母,另外,在字母表内有三个特殊符号'、,、.,其地位与其他拉丁字母是等同的。除了字母表内的符号外,逻辑语在行文中不使用标点符号和其他符号。 逻辑语字母表: C表示):b c d f g j k l m n p r s t v x z V表示):a e i o u y , . ' 一音一符原则:在任何情况下,每个字母的读音是不变的,读音与字母存在一对一关系。 逻辑语还有一些二合字母(两个字母共同组成一个音),其中有双辅音和双元音。 元音 逻辑语内任何元音开头的词前都要加.,无例外,且这个点在词典内是不会写出来的 元音字母 元音字母是指语言里起着发声作用的字母。 元音字母 发音 a 啊(汉语拼音 a) e 这个读音汉语拼音里没有,类似于英语单词 get 里 e 的发音。 i 咦(汉语拼音 i) o 喔(汉语拼音 o) u 呜(汉语拼音 u) y 呃(汉语拼音 e,这是一个需要弱读的元音,总之放松口腔,轻轻吐气发音足矣) 复合元音 两个元音可以组合在一起发出一个音,这就成了复合元音。 复合元音 发音 ai 爱(汉语拼音 ai) au 奥(汉语拼音 ao) ei 诶(汉语拼音 ei) oi 类似英语单词 boy 里 oy 的发音。 ia 呀(汉语拼音 ya) ie 夜(汉语拼音 ye) iu 优(汉语 you) ua 哇(汉语拼音 wa) ue 威(汉语拼音 wei) uo 喔(汉语拼音 wo) ui 类似英语单词 we 的发音 双元音 双元音 发音 ii 衣(汉语拼音 yi) uu 乌(汉语拼音 wu) 辅音 大多数逻辑语的辅音和英语类似, 辅音字母 发音 g 哥的声母(汉语拼音 g) c 西的声母(汉语拼音 x) j 师的声母(汉语拼音 sh) x 喝的声母(汉语拼音 h) 双辅音 辅音字母 发音 tc chip dj jump、在汉语和英语中常见的发音 j

2022/1/28
articleCard.readMore

扩充巴科斯范式(ABNF)初识

巴科斯范式是以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。 起步 一个ABNF规范是一些推导规则的集合: 规则 = 定义;注释CR LF 可细分为以下几个部分: 规则 定义 注释 (可选) CR LF(回车、换行)结束 规则名 大小写不敏感 规则名字不区分大小写: <rulename>, <Rulename>, <RULENAME>和<rUlENamE>指的都是同一个规则。 字母、数字和连字符(减号)组成。 尖括号非必须 用尖括号(<、>)包围规则名不是必需的(与BNF一样),它们可以用来在文中方便识别出规则名。 最终值 最终值为一个或多个数值字符。 数值字符可按下面的方式指定:先是一个百分号%,紧跟着基数(b=二进制, d = 十进制, x = 十六进制),再其后是这个数值或数值串(用.来指示串联)。例如:回车可以用十进制的%d13或十六进制的%x0D来指定,而回车换行则可以用%d13.10来指定。 字面文本通过包含在在双引号"中字符串指定。这些字符串不区分大小写,使用 (US-)ASCII字符集。所以字符串abc将匹配abc、Abc、aBc、abC、ABc、AbC、aBC和ABC。 aBc,定义必须是%d97 %d66 %d99。 操作符 空白字符 空白字符被用来分隔定义中的各个元素:要使空格被识别为分割符则必须明确的包含它。 串联 规则1规则2 规则可以通过列出一系列的规则名来定义。 要匹配字符串aba可以使用下列规则: foo = %x61 ; a bar = %x62 ; b mumble = foo bar foo 选择 / 规则1 / 规则2 一个规则可以通过用斜杠(/)分隔的可供选择的子规则列表来定义。 要接受规则或规则可构造如下规则: foobar = foo / bar 增量选择 =/ 规则1 =/ 规则2 可以通过在规则名和定义之间使用=/来向一个规则增加补充选择。 规则 ruleset = alt1 / alt2 / alt3 / alt4 / alt5 等价于 ruleset = alt1 / alt2 ruleset =/ alt3 ruleset =/ alt4 / alt5 值范围%c##-## %c##-## 数值范围可以通过使用连字符(-)来指定。 规则 OCTAL = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" 等价于 OCTAL = %x30-37 序列组合 () (规则1规则2) 在定义中,元素可以放置在圆括号中来将规则组合起来,该组合视为单个元素。 要匹配elem foobar snafoo或elem tarfoo snafoo可以构造下列规则: group = elem (foobar / tarfoo) snafoo 要匹配elem foobar或tarfoo snafoo可以构造下列规则: group = elem foobar / tarfoo snafoo group = (elem foobar) / (tarfoo snafoo) 不定量重复m*n 元素前面的星号*表示重复,其完整形式如下: m*n规则 要表示一个元素的重复,就要使用<m>*<n>元素形式。可选的<m>给出要包含的元素的最小数目,默认为0;可选的给出要包含的元素的最大数目,默认为无穷大。 例子: *元素 ; 表示零个或更多元素 1*元素 ; 表示一个或更多元素 2*4元素 ; 表示两个至四个元素 定量重复n n规则 要表示特定数目的元素可使用形式<n>元素,相当于用不定量重复形式表示的<n>*<n>元素。 使用2DIGIT得到两个数字,使用3DIGIT得到三个数字。(DIGIT在下面的核心规则中定义,也见例子中的zip-code)。 可选序列[] [规则] 要表示可选元素,下列构造等价: [foobar snafoo] *1(foobar snafoo) 0*1(foobar snafoo) 注释; ;注释 注释从一个分号(;)开始,并持续到此行的结束。 操作符优先级 下面的操作符给出了从高(结合最紧密)到低(结合最松散)的优先级: 规则名、最终值 注释; 值范围%c##-## 重复* 组合 ()、可选[] 串联 选择 / 选择操作符与串联一起使用会造成混淆,因此建议使用组合来确保串联组的明确。 例如: 我们 = 你 我/他 她 会产生下面两种歧义: (你 我)/(他 她) (你) (我/他) (她) 所以,使用组合来确保不会产生歧义: (你 我)/(他 她) 核心规则 核心规则定义于 ABNF 标准中。 规则 形式定义 意义 ALPHA %x41-5A / %x61-7A 大写和小写 ASCII 字母(A-Z, a-z) DIGIT %x30-39 数字(0-9) HEXDIG DIGIT / "A" / "B" / "C" / "D" / "E" / "F" 十六进制数字(0-9, A-F, a-f) DQUOTE %x22 双引号 SP %x20 空格 HTAB %x09 横向制表符 WSP SP / HTAB 空格或横向制表符 LWSP *(WSP / CRLF WSP) 直线空白(晚于换行) VCHAR %x21-7E 可见(打印)字符 CHAR %x01-7F 任何 7 - 位 US-ASCII 字符,不包括 NUL(%x00) OCTET %x00-FF 8 位数据 CTL %x00-1F / %x7F 控制字符 CR %x0D 回车 LF %x0A 换行 CRLF CR LF 互联网标准换行 BIT "0" / "1" 二进制数字 实践 电子邮箱地址 email = 1*( atext / "." ) "@" label *( "." label ) label = let-dig [ [ ldh-str ] let-dig ] JSON // 语法树的跟【Root是系统内置,必须定义Root作为语法根节点,没有定义会报错】 Root = Value?; // 字符串 Text : "\""@ = "\"([^\"\\]|\\.)*\""; // 整型数值 Number : "[0-9]" = "0x[0-9a-fA-F]+" | "[0-9]+(%.[0-9]+)?"; // 空 Null [53,155,185] = <null>; // bool Bool = <true> | <false>; // Json值 Value = Text | Bool | Number | Null | Array | Object; // 数组 Array = '['@ (Value ArrayValuePair*)? ']'; // Array元素 ArrayValuePair = ','@ Value; // 映射表 Object = '{'@ (ObjectValue ObjectValuePair*)? '}'; // 键 ObjectKey = Text; // 键值对 ObjectValue = ObjectKey ':'@ Value; // Object元素 ObjectValuePair = ','@ ObjectValue; 参考资料 扩充巴科斯范式 - 维基百科,自由的百科全书 从零开始的 JSON 库教程(一):启程 RFC 5234: Augmented BNF for Syntax Specifications: ABNF 从零开始设计一门属于自己的开发语言

2021/12/7
articleCard.readMore

【译】5分钟入门Nim编程语言

Nim(原名Nimrod)是一种静态类型的命令式编程语言, Nim语言高效、有表现力、优雅。 # 单行注释以一个#开头 #[ 这是多行注释 在Nim语言中,多行注释可以嵌套,以#[开头,以]#结尾 ]# discard """ 这也可以作为多行注释使用。 或者用于无法解析、损坏的代码 """ var # 声明(和赋值)变量 letter: char = 'n' # 带或不带类型批注 lang = "N" & "im" nLength: int = len(lang) boat: float truth: bool = false let # 使用let*一次性*声明和绑定变量。 legs = 400 # legs是不可改变的。 arms = 2_000 # _会被忽略,对long类型非常有用。 aboutPi = 3.15 const # 常量在编译时计算。这确保了 debug = true # 性能,在编译时表达式中很有用。 compileBadCode = false when compileBadCode: # `when`是编译时的`if` legs = legs + 1 # 这个错误永远不会被编译。 const input = readline(stdin) # const在编译时必须是已知的。 discard 1 > 2 # 注意:如果表达式的结果未使用, # 编译器会发出警告。`discard`绕过了这一点。 # # 数据结构 # # 元组(Tuple) var child: tuple[name: string, age: int] # 元组有*字段名* today: tuple[sun: string, temp: float] # 和*顺序* child = (name: "Rudiger", age: 2) # 使用字面值()一次性赋值全部 today.sun = "Overcast" # 也可以单独赋值 today.temp = 70.1 # 序列(Sequence) var drinks: seq[string] drinks = @["Water", "Juice", "Chocolate"] # @[V1,..,Vn] 是序列的字面值 drinks.add("Milk") if "Milk" in drinks: echo "We have Milk and ", drinks.len - 1, " other drinks" let myDrink = drinks[2] # # 自定义类型 # # 定义你自己的类型使得编译器为你工作。 # 这使得静态类型变得强大和有用。 type Name = string # 类型别名为你提供一个新类型, Age = int # 该类型可与旧类型互换,但更具描述性。 Person = tuple[name: Name, age: Age] # 也可以定义数据结构。 AnotherSyntax = tuple fieldOne: string secondField: int var john: Person = (name: "John B.", age: 17) newage: int = 18 # 在这里使用Age比int要好 john.age = newage # 仍然有效,因为int和Age同义 type Cash = distinct int # `distinct`使一个新类型与它的基本类型不兼容。 Desc = distinct string var money: Cash = 100.Cash # `.Cash`把int转换成我们的类型 description: Desc = "Interesting".Desc when compileBadCode: john.age = money # 错误!age是int类型、money是Cash类型 john.name = description # 编译器说:“没门!” # # 更多类型和数据结构 # # 枚举类型只能具有有限数量的值之一 type Color = enum cRed, cBlue, cGreen Direction = enum # 可选格式 dNorth dWest dEast dSouth var orient = dNorth # `orient`的类型是Direction,值是`dNorth` pixel = cGreen # `pixel`的类型是Color,值是`cGreen` discard dNorth > dEast # Enum通常是“序数”类型 # 子范围指定有限的有效范围 type DieFaces = range[1..20] # 只有从1到20的int才是有效值 var my_roll: DieFaces = 13 when compileBadCode: my_roll = 23 # 错误! # 数组(Array) type RollCounter = array[DieFaces, int] # 数组长度固定 DirNames = array[Direction, string] # 以任意有序类型索引 Truths = array[42..44, bool] var counter: RollCounter directions: DirNames possible: Truths possible = [false, false, false] # 数组字面以[V1,..,Vn]表示 possible[42] = true directions[dNorth] = "Ahh. The Great White North!" directions[dWest] = "No, don't go there." my_roll = 13 counter[my_roll] += 1 counter[my_roll] += 1 var anotherArray = ["Default index", "starts at", "0"] # 可用的数据结构包括表、集合、列表、队列、压缩前缀树。 # http://nim-lang.org/docs/lib.html#collections-and-algorithms # # IO和控制流 # # `case`, `readLine()` echo "Read any good books lately?" case readLine(stdin) of "no", "No": echo "Go to your local library." of "yes", "Yes": echo "Carry on, then." else: echo "That's great; I assume." # `while`, `if`, `continue`, `break` import strutils as str # http://nim-lang.org/docs/strutils.html echo "I'm thinking of a number between 41 and 43. Guess which!" let number: int = 42 var raw_guess: string guess: int while guess != number: raw_guess = readLine(stdin) if raw_guess == "": continue # 跳出循环 guess = str.parseInt(raw_guess) if guess == 1001: echo("AAAAAAGGG!") break elif guess > number: echo("Nope. Too high.") elif guess < number: echo(guess, " is too low") else: echo("Yeeeeeehaw!") # # 循环(Iteration) # for i, elem in ["Yes", "No", "Maybe so"]: # 也可以是`for elem in` echo(elem, " is at index: ", i) for k, v in items(@[(person: "You", power: 100), (person: "Me", power: 9000)]): echo v let myString = """ an <example> `string` to play with """ # 多行字符串 for line in splitLines(myString): echo(line) for i, c in myString: # 索引和字符。或使用'for j in'只有字符 if i mod 2 == 0: continue # 紧凑的'if'形式 elif c == 'X': break else: echo(c) # # 过程(Procedure) # type Answer = enum aYes, aNo proc ask(question: string): Answer = echo(question, " (y/n)") while true: case readLine(stdin) of "y", "Y", "yes", "Yes": return Answer.aYes # 枚举类型可以 of "n", "N", "no", "No": return Answer.aNo else: echo("Please be clear: yes or no") proc addSugar(amount: int = 2) = # amount默认是2,不返回任何值 assert(amount > 0 and amount < 9000, "Crazy Sugar") for a in 1..amount: echo(a, " sugar...") case ask("Would you like sugar in your tea?") of aYes: addSugar(3) of aNo: echo "Oh do take a little!" addSugar() # 这里不需要使用`else` 。只能是`yes`和`no`。 # # 外部函数接口(FFI) # # 因为Nim可以编译为C,使用外部函数接口(FFI)很简单: proc strcmp(a, b: cstring): cint {.importc: "strcmp", nodecl.} let cmp = strcmp("C?", "Easy!") 除此以外,Nim通过元编程、性能和编译时特性将自己与其他同类分离开来。 进阶阅读 主页 下载 社区 常见问题 文档 参考手册 标准库 Rosetta Code

2021/12/4
articleCard.readMore

Cakewalk安装无反应的解决办法

请在BandLab Assistant里面删除Cakewalk 案发经过 安装Cakewalk时没用放在C盘,导致后续音源出问题,无奈只能删除重装。 解决办法 win + R 输入 regeidt打开注册表编辑器 HKEY_LOCAL_MACHINE\SOFTWARE\Cakewalk Music Software\Cakewalk\Installers\DC294903-7970-42DB-B049-04FA5E7C6332即可。 参考资料 如何纯净地重装 Cakewalk UNABLE TO UNINSTALL CAKEWALK 为什么我删除cakewalk之后想重新下载 但是bandlab上面显示我下载好了 导致我下载不了?

2021/12/2
articleCard.readMore

C语言教程 - while循环

while循环与for循环很像,但功能更少。 while循环与for循环很像,但功能更少。只要条件为真while循环会一直执行代码块。例如下面的代码会执行十次: int n = 0; while (n < 10) { n++; } while循环会一直执行只要判断为真(即非零值): while (1) { /* 做某事 */ } 循环指令 在C语言中有两个重要的循环指令在所有的循环类型起作用——break和continue指令。 在循环10次后break指令停止循环,尽管从条件来这个while循环判断永远不会结束: int n = 0; while (1) { n++; if (n == 10) { break; } } 在下面的代码中,continue指令使printf命令被跳过,所以只有偶数被打印出来: int n = 0; while (n < 10) { n++; /* 检查n是否为奇数 */ if (n % 2 == 1) { /* 回到while代码块的开头 */ continue; } /* 只有当n是偶数时,才能执行到这行代码 */ printf("The number %d is even.\n", n); } Exercise array变量是一个10个数字组成的序列。在while循环中,你必须写两个if判断, printf命令): 如果当前数字小于5,不打印。 如果当前数字大于10,不打印并停止循环。 请注意:如果不推进迭代器变量i并使用continue指令,你将陷入死循环。 Tutorial Code #include <stdio.h> int main() { int array[] = {1, 7, 4, 5, 9, 3, 5, 11, 6, 3, 4}; int i = 0; while (i < 10) { /* 在这里写你的代码 */ printf("%d\n", array[i]); i++; } return 0; } Expected Output 7 5 9 5 Solution #include <stdio.h> int main() { int array[] = {1, 7, 4, 5, 9, 3, 5, 11, 6, 3, 4}; int i = 0; while (i < 10) { if(array[i] < 5){ i++; continue; } if(array[i] > 10){ break; } printf("%d\n", array[i]); i++; } return 0; }

2021/11/2
articleCard.readMore

Dev-C++ FAQ

使用过程中的踩坑记录。 什么是Dev-C++ 百度百科的dev词条描述 Dev-C++是一个Windows下的C和C++程序的集成开发环境。它使用MingW32/GCC编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,能够适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!多国语言版中包含简繁体中文语言界面及技巧提示,还有英语、俄语、法语、德语、意大利语等二十多个国家和地区语言提供选择。 百度百科的Dev-C++词条描述 Dev-C++(或者叫做Dev-Cpp)是Windows环境下的一个轻量级C/C++集成开发环境(IDE)。它是一款自由软件,遵守GPL许可协议分发源代码。它集合了功能强大的源码编辑器、MingW64/TDM-GCC编译器、GDB调试器和AStyle格式整理器等众多自由软件,适合于在教学中供C/C++语言初学者使用,也适合于非商业级普通开发者使用。 为什么选择Dev-C++ 正如百度百科中的描述,使用Dev-C++更多的是C/C++语言初学者。 选择哪个Dev-C++ 有哪些版本 Dev-C++版本 开发商(者) 更新情况 特点 Bloodshed Dev-C++ Bloodshed公司 2011年 v4.9.9.2 后停止开发 蓝色经典 Orwell Dev-C++ 独立开发者 Orwelldevcpp 2016年 v5.11后停止更新 TDM-GCC 4.9.2 32/64bit Banzhusoft Dev-C++ 国内开发者 Banzhusoft (斑竹软件) 最新版本 5.15(2020年9月发布) 现代化的改进、编译出错信息中文显示、代码自动格式化 小熊猫Dev-C++ (原名Dev C++ 2020) 国内开发者 royqh1979 最新 2021年8月20日 Version 6.7.5 优化改进代码补全提示、界面改善功能增强、自动链接、自带GCC集成EGE绘图库和海龟作图库及其项目模板 Embarcadero Dev-C++ Embarcadero公司 最新 2021年1月31日 v6.3 增新功能,添加了新主题,增加了多种字体,主图标更改为红色 版本演进 各版本工作界面 Banzhusoft Dev-C++ 小熊猫Dev-C++ Embarcadero Dev-C++ 笔者推荐的版本 小熊猫Dev-C++和Embarcadero Dev-C++都是不错的选择,截至目前两者都在持续更新。 Dev-C++常见问题及技巧 新手问题 新建工程 请在Dev-C++中将工程区别于源代码 文件>新建>项目,选择项目模板、编程语言、填写项目名称,完成。 Dev-C++工程结构 一个普通工程目录下有如下文件 HelloWorld.dev 项目文件,双击打开这个Dev-C++项目 HelloWorld.exe 编译生成的可执行文件 HelloWorld.layout 项目的其他配置信息(如编辑器的外观设置) main.c 代码文件 main.o 编译中间产物 Makefile.win Makefile文件(Windows平台) 解决输出中文乱码 如果你直接在Dev-C++中打印你好,你会得到浣犲ソ。 编译时加入如下命令,在下方文本框中输入-fexec-charset=gbk,问题解决。 进阶技巧 解决编辑器中文无法显示 截至2021年10月14日官方还是没有修复,相关的issue积攒了五六个(╬▔皿▔)凸 你可能遇到过在编辑器中输入中文取消选中后文字隐形的情况,不要着急,急也没用。 ID 27071 translation missing,中文正常显示。 为程序添加图标 图标文件仅支持ico格式,可以使用在线转换网站转换图片文件到*.ico文件。 项目>项目属性>普通,图标>库——可以使用自带的图标,图标>浏览——可以使用自定义的图标。 为程序添加资源 选32位还是64位 64位的程序仅支持在64位的平台上执行,而32位的程序在32位和64位的平台上都能执行。 隐藏控制台黑窗口 项目>项目属性>编译器>定制>连接器>不产生控制台窗口,选择Yes。 添加第三方库 项目>项目属性 添加库文件 进入文件/目录 链接库 进入参数 链接下面的文本框中添加链接参数,例如:-luuid,多个库使用空格或换行分开。 常见绘图库 什么是win32程序 参考资料 [1]dev(计算机语言C/C++开发工具)_百度百科 Dev-C++_百度百科

2021/10/8
articleCard.readMore

《Moe Era》 - 时代潮流中不值一提的我

这是一个深刻的、奇妙的故事。过了一个小时,就像只过了几秒。 初识 Steam商店界面简介: 进入可爱的东西的时代吧!这个世界什么都有,只缺少一个能够解救四个美女的英雄。这个英雄会是你吗? Steam游戏评测摘选: 在游戏的结局,就像是作者站在街道上对过往的行人们微笑致意;“你可千万不要再这样过下去了”。而结尾希望我们无论是去做什么,要对自己选择有意义的生活,无论平淡与否,为之改变自我,认识自我,找到自我的价值,即使平淡也是幸福的。 如果你是冲着“免费‘”色情内容”“恋爱模拟”这几个标签来的,仅此而已,那就请先改变你的想法,否则你会得不到你想要的,这游戏给不了你,不如去色情分区自己买。 噢上帝,你绝对不会相信我竟然在一款免费的游戏里看见了动态背景CG,以及天马行空的立绘展现方式,甚至还穿插有通过选择组合出一款属于你自己的蛋糕的创意内容。欧美游戏制作者们不拘一格的想象力让我看见了不同于日产galgame的更多可行性,这仅是我游玩半个小时的直观感受! 如果我是作者,做一款表现自己的游戏大概如此,把自己想法分成好几个家伙,中间塞点福利,免费让大家认识自己。 体验 项目 分数 画面 ⭐⭐⭐⭐ 剧情 ⭐⭐⭐⭐⭐ 翻译 ⭐⭐⭐ 音乐 ⭐⭐⭐⭐ 虽然我更喜欢日系动漫画风,但本作画面在细细品味一番后,别有风味,说不上特别优秀,为游戏加分没得说。动态背景、CG配合情节确实惊艳。 本作的音乐风格偏空灵,不免让我联想起DDLC。事实证明不过是虚惊一场 舒曼和他的梦幻曲。 原谅我对音乐的无知(笑)。 游戏用四天来映射一生,其余的人生用几张桌面的变迁代替。 游戏支持中、英、俄、日四种语言,有的文本翻译的十分接地气,有的又像是机翻一样。 不知道是不是刻意而为之 资料 舒曼 - 维基百科 舒曼: 《童年情景》梦幻曲 - Piano lullaby classic (클래식 기타의 향기) - 网易云音乐

2021/9/8
articleCard.readMore

C语言教程 - for循环

C语言中的for循环非常简单。 Tutorial C语言中的for循环非常简单。你能用它创建一个循环—一块运行多次的代码块。 i。 for循环能够做这些: 用一个初始值初始化迭代器变量 检查迭代变量是否达到最终值 增加迭代变量的值 如果想运行代码块10次,可以这样写: int i; for (i = 0; i < 10; i++) { printf("%d\n", i); } 这段代码会打印从0到9的数字。 for循环能够用来获取数组的每一个值。要计算一个数组所有值的和,可以这样使用i: int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int sum = 0; int i; for (i = 0; i < 10; i++) { sum += array[i]; } /* 求a[0]到a[9]的和 */ printf("Sum of the array is %d\n", sum); Exercise 计算数组array的阶乘(从array[0]乘到array[9])。 Tutorial Code #include <stdio.h> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int factorial = 1; int i; /* 在这里使用for循环计算阶乘*/ printf("10! is %d.\n", factorial); } Expected Output 10! is 3628800. Solution #include <stdio.h> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int factorial = 1; int i; for(i=0;i<10;i++){ factorial *= array[i]; } printf("10! is %d.\n", factorial); }

2021/9/5
articleCard.readMore