ASM编写的Game Boy经典蛇游戏复刻

需积分: 9 0 下载量 13 浏览量 更新于2024-12-17 收藏 22KB ZIP 举报
资源摘要信息:"gb_raw_snake:来自Game Boy的小型原始蛇游戏" 知识点: 1. 游戏开发背景: 游戏是在Game Boy平台上的小型原始蛇游戏,使用汇编语言(ASM)编写。Game Boy是任天堂公司于1989年推出的一款手掌大小的便携式游戏机,其后继机型有Game Boy Color和Game Boy Advance等。 2. 开发者经验: 游戏是作者的第一个针对GB平台的完整项目,也是作者第一个仅使用汇编语言的软件开发作品。这表明项目的开发不仅是对经典Snake游戏的一个端口,也是作者学习和应用汇编语言的一个重要实践。 3. 汇编语言学习: 游戏开发的过程被用作学习汇编语言的机会。汇编语言是计算机的基础语言,每一行代码几乎都直接对应着硬件的某个操作。通过开发这样的项目,开发者可以更好地理解计算机硬件的工作原理。 4. Game Boy特性理解: 作者提到,通过阅读文档可以了解Game Boy,但是认为通过实践来修改并尝试理解机器是最好的方法。这涉及到硬件编程和底层系统设计的知识,强调了实操经验在学习硬件相关知识中的重要性。 5. 游戏特点: - 简单的标题屏幕和固定的可玩网格:游戏在Game Boy上展示了一个20 x 19的方格网格,没有边框。 - 蛇的移动逻辑:游戏中的蛇最多可以由275个“蛇形段”组成,但这个数量实际上被限制在255,因为长度信息存储在8位的单个RAM空间中,使用一对字节可以突破这个限制。 - 游戏速度:游戏具有固定的速度,不存在因碰撞而导致的额外步骤。 - 无声音设计:游戏不含任何声音效果。 6. 技术实现: 从技术角度,项目是使用汇编语言完全从零开始编写的,没有使用任何高级语言或游戏开发框架。汇编语言的使用展现了开发者对底层硬件和操作系统深入的理解和控制能力。 7. 文件名称解析: 给定的文件名称“gb_raw_snake-main”表明该文件是项目的主要组成部分。在软件开发中,通常“main”文件包含主程序入口或核心逻辑,这与上述的项目描述相符。 8. 教育意义: 对于想要学习底层编程和游戏开发的初学者而言,这个项目提供了实践和学习的范例。开发者通过将一个简单但经典的蛇游戏移植到Game Boy上,不仅复习了汇编语言,还深入理解了这个平台的硬件架构。 9. 历史和文化价值: 对于那些怀旧的玩家或研究者来说,这样的项目能够唤起对旧式便携游戏机的记忆,并可能激发对早期游戏开发文化的兴趣和研究。 以上分析基于给定的信息,对于具体的汇编语言实现细节、项目中遇到的技术挑战以及解决方案、以及如何在现代设备上运行该程序等知识点则没有在描述中提及。

grant execute on dbms_crypto to system; declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw ); decrypted_raw := DBMS_CRYPTO.DECRYPT ( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; SELECT Price FROM PRODUCT WHERE ProductID = 5;修正这一段代码

2023-05-26 上传

grant execute on dbms_crypto to system; -- 第一个代码块 declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw); decrypted_raw := DBMS_CRYPTO.DECRYPT(src => encrypted_raw, typ => encryption_type, key => key_bytes_raw); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; -- 第二个代码块 declare l_src_data varchar2(20); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_encval raw(2000); cursor secret_cursor is select phonenumber from customer; begin open secret_cursor; loop fetch secret_cursor into l_src_data; exit when secret_cursor%notfound; l_encval := dbms_crypto.encrypt(src => utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); dbms_output.put_line(l_encval); end loop; close secret_cursor; end; -- 第三个代码块 declare l_src_data raw(100) := hextoraw('190248129038903853275ijdkvjkad'); l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) := '0123456789123456'; l_decval raw(200); begin l_decval := dbms_crypto.decrypt(src => l_src_data, typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; -- SQL 查询语句 SELECT Price FROM PRODUCT WHERE ProductID = 5;declare * ERROR at line 18: ORA-06550: line 18, column 1: PLS-00103: Encountered the symbol "DECLARE"报错

2023-05-26 上传