How to take CS50X
How to take CS50XWhat you need
A GitHub Account 👉 https://github.com/join
An edX Account 👉https://authn.edx.org/register
A Proxy if you’re in China ( mainland ) 👉 GFW
SyllabusCS50X 的最新版是 2023,官网是这个
https://cs50.harvard.edu/x/2023/
非常建议在参与课程之前先看一下官网的 syllabus
Syllabus - CS50x 2023 (harvard.edu)
About Submit如果你想获得一个证书,你需要:
submit ten problem sets,
submit nine labs, and
submit a final project.
所以,在 Week0 的 pset 和 Week1 的 lab中,我们进行若干配置
Week 0在 Scratch - CS50x 2023 (harvard.edu) 的pset 中,你需要 ...
常见的 (我知道的) GUI 开发框架
图形用户界面 (Graphical User Interface, GUI)
图形用户界面 (Graphical User Interface, GUI), 又称图形用户接口,是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
关于 GUI ,度娘百科如是说道。
做 GUI ,就要借助 GUI 开发框架… 什么,直接调用操作系统原生 API ?额 …
好像也不是不行?
真的要那样做吗…
从Win32 API 开始说起
那有没有 Win64 API 呢?
并没有。Win32并不是指 32 位 Windows,而是现代 NT 内核 Windows 的统称。
Windows应用程序编程接口(Windows Application Programming Interface),是 Windows 操作系统提供给应用程序编程的接口。
W ...
记录我的大一上计算导论课
这篇博文来自我的一个 Github 仓库 的 README.md 。
与其说是对计算导论这门课的记录,其实是对我大一上学期的记录,大概有托物言志的意思吧。
Introduction of Computer Science (ICS)大学有四年,八个学期,如今它的八分之一业已要结束了,回想这半年,不可不谓忙碌,但并不能谓之充实,(^_^) ,我把时间放到了什么事情上呢?去赶水课的 ddl ,到正课的时候,精力却挥霍完了,只好睡大觉,emm
认识的人
上了大学一定要拓宽交友圈子,广交优秀的人,朝着有意义的充实的玫瑰色大学生活,进击!
会这样想的我果然是个笨蛋,这半年来,接触最多的是三个舍友,说的话恐怕用一个小盒子就能绰绰有余的存放起来,接触最多的女性是舍管阿姨与食堂阿姨,啊不,甚至连食堂都懒得去,准确的说连校外外卖都不愿意点,因为要到北门去拿,所以只订校内的几家外卖,味道真是乏善可陈,话说,不管怎样的珍馐,天天吃也会吐的吧!
有时候就泡泡面咯,泡面当然还是汤达人吧,因为汤比较好喝,不过,或许是因为一个人吃,汤远远没有高中的时候,一个宿舍八个人分一碗面汤时的鲜美。
顺便吐槽一下,金汤肥 ...
用 Qt 写五子棋的夜晚 三
我们首先会介绍游戏运行的逻辑,然后会介绍 AI 的实现,最后会介绍一些打包的细节。
After go这个游戏的逻辑是这样的:
当游戏开始后,initGame() 函数会被调用,这个函数会初始化游戏的一些参数,比如棋盘的大小,棋盘的数组,以及棋盘的 UI,还会调用一次重绘函数,来绘制棋盘。
最后,initGame() 函数会调用 startGame() 函数,这个函数会启动游戏的主循环。
在游戏的主循环中,会不断的接收玩家的输入,然后判断玩家的输入是否合法,如果合法,就会调用 AfterGo() 函数,这个函数会判断游戏是否结束,如果游戏结束,就会调用 gameOver() 函数,这个函数会弹出一个对话框,告诉玩家游戏结束了,然后会调用 initGame() 函数,重新开始游戏。
如果游戏没有结束,就会调用 changePlayer() 函数,这个函数会切换玩家,然后调用重绘函数,来重绘棋盘。
不同的游戏模式下,changePlayer() 函数的行为是不一样的,比如人机对战模式下,changePlayer() 函数会调用 AI 的函数,来让 AI 下棋,而 PVP 模式下,这个函数 ...
用 Qt 写五子棋的夜晚 二
这篇博文主要讲了 Qt 中的信号与槽 (Signals & Slots)
信号与槽 (Signals & Slots)信号和槽是用于对象之间的通信的。信号和槽机制是 Qt 的一个核心特性,也是与其他框架提供的特性最不同的部分。信号和槽是由 Qt 的元对象系统实现的。
介绍在 GUI 编程中,当我们改变一个小部件时,我们经常希望另一个小部件被通知到。更一般地说,我们希望任何类型的对象都能够相互通信。例如,如果用户点击一个关闭按钮,我们可能希望调用窗口的 close() 函数。
其他工具包使用回调来实现这种通信。回调是一个指向函数的指针,因此如果您希望处理函数通知您某些事件,您将一个指向另一个函数(回调)的指针传递给处理函数。然后,处理函数在适当的时候调用回调。虽然使用这种方法的成功框架确实存在,但回调可能是不直观的,并且可能存在确保回调参数的类型正确性的问题。
少年,有听说过回调地狱吗?
Signals and Slots在 Qt 中,我们有一个替代回调技术的方法:我们使用信号和槽。当发生特定事件时,会发出一个信号。Qt 的小部件有许多预定义的信号,但我们总是可以 ...
用 Qt 写五子棋的夜晚 一
这篇 Blog 将会记录我用 Qt 写五子棋的过程,以及遇到的一些问题和解决方法。
大一上的计算导论的结课大作业,是要求我们用 C/C++ 写一个五子棋游戏。
简单的控制台版本我们可以十分简单的用控制台来实现一个五子棋,这种 UI 常被称为 TUI (Text-based User Interface)。
我们需要用到一些特殊字符,它们被称为 ANSI 转义序列,可以用来控制控制台的输出。
ANSI转义序列(ANSI escape sequences)是一种带内信号的转义序列标准,用于控制视频文本终端上的光标位置、颜色和其他选项。在文本中嵌入确定的字节序列,大部分以ESC转义字符和[字符开始,终端会把这些字节序列解释为相应的指令,而不是普通的字符编码。
这里列一个表格,方便以后查阅:
转义序列
含义
\e[1;1H
将光标移动到终端的第一行第一列(即屏幕的左上角位置)
\e[2J
清屏
\e[?25l
隐藏光标
\e[?25h
显示光标
|颜色序列|含义|| RESET | \x1b[0m|| RED | \x1b[31m || GREEN ...
从 K&R 到 巫师书,以及程序员的浪漫
这篇 Blog 将会介绍一些编程书籍的有趣的别称,以及它们的来源,还会介绍一些著名的程序员,以及他们的故事。
K&R 与缩写简称在不知道哪一篇博文中,我们介绍了 C 语言三剑客,它们分别是:
书名
原名
作者
插图
C 和指针
C and Pointers
Kenneth A. Reek
C 专家编程
Expert C Programming
Peter van der Linden
C 陷阱与缺陷
C Traps and Pitfalls
Andrew Koenig
不过,要说起 C 语言最经典的书籍,那还是是《 C 程序设计语言 》 (The C Programming Language) by Brian W. Kernighan and Dennis M. Ritchie,这本书有一些非官方的称呼,比如 C 语言的圣经什么的。
但是最为流行的称呼,还是莫过于用两位作者的姓的缩写来命名的 K&R。
书名
K&R
K
R
《 C 程序设计语言 》
The C Programming Language
Brian ...
补码 ==> Complement
“反码加一”只是补码所具有的一个性质,不能被定义成补码。
负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。
这是补码设计的初衷,具体目标就是让1+(-1)=0,这利用原码是无法得到的
这篇文章将会介绍原码、反码、补码的定义,以及补码的计算方法。
原码最高位为符号位,0表示正数,1表示负数。
例如:X = 0b11 (3),四比特表示原码 = 0011(3) ;
X = - 0b11(-3) ,四比特表示原码 = 1011(11) ;
反码最高位为符号位,0表示正数,1表示负数。
正数的反码等于本身,负数的反码除符号位外,各位取反:
例如:X = 0b11 (3),四比特表示原码 = 0011(3),对应反码为 = 0011(3) ;
X = - 0b11(-3) ,四比特表示原码 = 1011(11),对应反码为 = 1100(12) ;
补码最高位为符号位,0表示正数,1表示负数。
正数的补码等于本身,负数的补码等于反码+1:
例如 ...
VScode 初见 --> 进行C语言编程
这篇 Blog 会帮助你运用 VScode 进行 C 语言编程,希望能帮助到你。
Let’s develop C program with VScode !
Code editing.
Redefined
前置知识什么是 VScode
Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在您的桌面上运行,并且可用于 Windows,macOS 和 Linux。它具有内置的 JavaScript,TypeScript 和 Node.js 支持,并具有丰富的其他语言(如 C++,C#,Java,Python,PHP,Go)和运行时(如 .NET 和 Unity)扩展。– VScode 官网
C 语言 – 编写,编译,运行用十分简单但不严谨的语言来描述,我们编写的代码(.c / .cpp文件),需要经过编译器的编译,转化为机器能够识别的二进制代码(.exe 文件),然后由计算机执行。
常见的 C 语言编译器有 gcc,clang,MSVC (from Visual Studio) 等等。而本文我们将使用的是 gcc。
什么是 gccgcc,全称 GNU Com ...
C 和指针 < C and Pointer > 快速上手
让我们来分析一下 C and Pointer 这本书的第一章 快速上手 所给出的一个例子。
这个例子是一个简单的程序,它从标准输入中读取输入行并在标准输出中打印这些输入行,每个输入行的后面一行是该行内容的一部分。
让我们从 main 函数开始输入的第一行是一串列标号,串的最后以一个负数结尾,这些列标号成对出现,说明需要打印的输入行的列的范围
1234567891011121314151617181920212223242526#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAX_COLS 20 /* 所能处理的最大列号*/#define MAX_INPUT 1000 /*每个输入行的最大长度*/int read_column_numbers(int columns[] , int max);void rearrange(char *output, char const *input, int n_columns , int const col ...