建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元(用linux实现猜数字小游戏源码)

GG网络技术分享 2025-03-18 16:14 0


我的名片能运行Linux和Python,还能玩2048小游戏,成本只要20元

点击上方 \"程序员小乐\"关注, 星标或置顶一起成长

第一时间与你相约

每日英文

There is a time in life that is full of uneasiness.We have no other choice but to face it.

生命中总有那么一段时光,充满不安,可是除了勇敢面对,我们别无选择。


每日掏心话

一生遇到的大部分人,都是从陌生到熟悉、再从熟悉到陌生。这是世间最无奈的聚散。


来自:量子位 报道 | 公众号 QbitAI | 责编:乐乐

程序员小乐(ID:study_tech)第 731 次推文 图片来自网络


往日回顾:不可思议!一个3D面具就能破解刷脸支付,还能进火车站?微信:盗刷,我赔!


正文


猜猜它是什么?印着姓名、职位和邮箱,看起来是个名片。可是右下角有芯片,看起来又像是个PCB电路板。

其实它是一台超迷你的ARM计算机,不仅能够运行Linux系统,有Python解释器,连上电脑还能玩2048小游戏。

而且只需6秒就能快速启动操作系统。

当然,它也是一个电子名片,系统中可以存入你的简历信息、照片。

这是一位嵌入式工程师George Hilliard作品,整个名片的成本才20元,却已经拥有如此多的功能,难怪让不少网友惊叹,一天之内就在Hacker News上收获2000多赞。

下面让我们一起来看看他是如何制作的吧。

设计和组装

在合理的设计下,这张名片的成本极低,PCB、芯片和其他电子器件加起来,总成本不超过3美元

如何选择一款成本低廉且可用的处理器,是这个项目最关键的部分。

经过大量的研究,George选择了深圳全志公司的F1C100s,选择它的原因是太XX的便宜了(damn cheap),且集成了RAM和CPU。

这款芯片是他在淘宝上买的(不得不让人感叹万能的淘宝)。其他元器件均购自LCSC。

George小哥在JLC上制作了PCB,花8美元得到了10块电路板,颜色是磨砂黑,看起来高端大气上档次。

不过制作完的PCB还是有点小问题:USB接口不够长,很难与多数端口稳定连接;芯片引脚有错,必须手动弯曲调整。

由于这些零件的尺寸很小,George小哥决定使用便宜的回流焊。而且他有激光切割机,可以制作焊锡膏丝印模板。

在涂好焊锡膏后,他手动贴上了元器件。零件和焊锡膏均符合RoHS规定。

由于手动贴一个电子器件需要10秒,因此George小哥尽量减少了贴片的数量来降低工作量。

最后附上完整的物料成本:

这里只包括硬件成本,一张名片需要2.88美元,折合人民币大约20元。

能跑Linux和Python

这款名片能够做什么?

由于尺寸和成本的原因,名片卡缺少I/O接口,不能再外接其他设备。尽管如此,George还是设法将很多有趣的东西塞入了固件中。

Shell

将名片的USB接口插上电脑,大约6秒内即可启动超级精简的Linux系统。电脑会将其显示为USB闪存驱动器和虚拟串行接口。

名片通过虚拟串行接口提供shell服务,我们可以登录root账户,访问以下程序:


  • rogue:经典的Unix游戏《地牢爬虫》



  • 2048:曾经风靡全球的数字游戏《2048》控制台版本



  • fortune:各种名人名言,为了给其他功能腾出空间,并不包括完整的数据库。

  • micropython:一个简化版的Python解释器。


这个名片包含一个超级精简的Linux系统,和一个简化版的Python解释器MicroPython,登录shell后还能运行rogue、2048小游戏。

模拟闪存驱动器

在编译过程中,构建工具会生成一个小的FAT32镜像,并将其添加到UBI分区。Linux小工具子系统会将其作为存储设备呈现给PC。

George在里面放上了自己的简历和摄影作品,可以在源代码中查看到这些内容。

DIY资源

小哥在GitHub上开源了所有的代码、电路原理图,至于FC100s芯片如何开发,官方有技术文档可供参考。

如果你有兴趣,也可以去试试。

博客地址:
https://www.thirtythreeforty.net/posts/2019/12/my-business-card-runs-linux/#source-code

源代码:
https://github.com/thirtythreeforty/businesscard-linux

电路原理图:
https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf

FC100s技术文档:
https://www.thirtythreeforty.net/media/F1C100s_Datasheet_V1.0.pdf
https://www.thirtythreeforty.net/media/Allwinner_F1C600_User_Manual_V1.0.pdf


欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。


猜你还想看


阿里、腾讯、百度、华为、京东最新面试题汇集

Nginx是什么?能干嘛?看完这篇你就明白了!

8岁上海小学生B站教编程惊动苹果,库克亲送生日祝福

93.7% 的程序员,竟然都不知道 Redis 为什么默认16个数据库?


关注「程序员小乐」,收看更多精彩内容
嘿,你在看吗?


用linux实现猜数字小游戏源码

一个简单的linux猜数字小游戏源码

游戏规则:

猜数字游戏通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的 4 个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几 A 几 B,其中 A 前面的数字表示位置正确的数的个数,而 B 前的数字表示数字正确而位置不对的数的个数。如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个 5 的位置对了,记为 1A,而 3 和 4 这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。接着猜的人再根据出题者的几 A 几 B 继续猜,直到猜中(即 4A0B)为止。

猜的人有 8 次机会。

例如:

乙出一个数字,甲猜。

甲 乙

1234 1A0B

5678 2A1B

5674 1A1B

5638 1A1B

2678 2A2B

6278 4A0B(猜中)

源码:

#!/bin/bash
clear
echo
echo \"###################################################################\"
echo \"# this is a bash-shell game write by lee       #\"
echo \"# this game is infinite frequency 猜数字       #\"
echo \"#    version 2.1.1.20200421        #\"
echo \"###################################################################\"
echo -e \"\\n\\n\"
declare INPUT
declare PASSWORD
declare LEN_PWD
declare A
declare B
declare LOOP

#this function is create random number
random_number()
{
PASSWORD=$RANDOM
LEN_PWD=`echo $PASSWORD | wc -L`
if [[ $LEN_PWD -ne 4 ]]
then
random_number
else
#输出标准值,测试需要,开发完成注释掉
echo $PASSWORD
input
fi
}

#this function is accept the input from user\'s keyboard
input()
{
read -n4 -p \"please input a number between 0000-9999:\" input
# 10#${input} 进制转换
if [[ 10#${input} -eq 10#${PASSWORD} ]]
then
echo -e \"\\n\"
echo \"#############################################\"
echo \"#congratulations!You have tried $LOOP times!#\"
echo \"# The password is $PASSWORD !   #\"
echo \"#############################################\"
exit
elif [[ $LOOP -eq 6 ]]
then
echo -e \"\\n\"
echo \"You have tried $LOOP times!Game over!\"
exit
else
A=0
B=0
count_a
count_b
echo -e \"\\n\"
echo \"****************************\"
echo \"*  \"$A\"A\"$B\"B   *\"
echo \"****************************\"
echo \"You have tried $LOOP times! You left `expr 6 - $LOOP` times!\"
LOOP=`expr $LOOP + 1`
input
fi
}

#this function is count the variable A\'s value
count_a()
{
for i in `seq 4`
do
VAR_INPUT=`expr substr $input $i 1`
for j in `seq 4`
do
VAR_PASSWORD=`expr substr $PASSWORD $j 1`
if [[ $VAR_INPUT -eq $VAR_PASSWORD ]] && [[ $i -eq $j ]]
then A=`expr $A + 1`
fi
done
done
}

#this function is count the variable B\'s value
count_b()
{
for i in `seq 4`
do
VAR_INPUT=`expr substr $input $i 1`
for j in `seq 4`
do
VAR_PASSWORD=`expr substr $PASSWORD $j 1`
if [[ $VAR_INPUT -eq $VAR_PASSWORD ]] && [[ $i -ne $j ]]
then B=`expr $B + 1`
fi
done
done
}

LOOP=1
random_number

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

用linux实现猜数字小游戏源码 (https://www.wpmee.com/) WordPress教程 第1张

标签:

提交需求或反馈

Demand feedback