菜鸟教程

简介

JavaScript 是脚本语言

JavaScript 是一种轻量级的编程语言;是可插入 HTML 页面的编程代码;插入 HTML 页面后,可由所有的现代浏览器执行。

可直接写入HTML输入流

1
2
3
4
<script>
document.write("<h1>这是一个标题</h1>");
document.write("<p>这是一个段落。</p>");
</script>

简单逻辑判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<body>

<h1>我JavaScript</h1>
<p>请输入数字。如果输入值不是数字,浏览器会弹出提示框。</p>
<input id="demo" type="text">
<script>
function myFunction()
{
var x=document.getElementById("demo").value;
if(x==""||isNaN(x))
{
alert("不是数字");
}
}
</script>
<button type="button" onclick="myFunction()">点击这里</button>

</body>
</html>

在HTML中使用

HTML 中的脚本必须位于 <script> 与 </script> 标签之间。
脚本可被放置在 HTML 页面的 <body> 和 <head> 部分中。
内部使用如上例,外部调用如下:

1
<script src="myScript.js"></script>

语法

基本语法

JavaScript 字面量

自然有

  • 数字(Number)字面量

3.14
101
123e5(科学计数)

  • 字符串(String)字面量
    “John Doe”
    ‘John Doe’(单引号或双引号)
  • 表达式字面量
    5 + 6
    5 * 10(直接算出答案)
  • 数组(Array)字面量
    [40, 100, 1, 10]
  • 对象(Object)字面量
    {firstName:”John”, lastName:”Doe”, age:50, eyeColor:”blue”}
  • 函数(Function)字面量
    function myFunction(a, b) { return a * b;}

JavaScript 变量

JavaScript 使用关键字 var 来定义变量, 使用等号来为变量赋值:

1
2
3
var x, length
x = 5
length = 6

JavaScript 使用动态弱类型
实际数据类型是根据赋值确定,具有兼容性(可16+“0”输出160)

1
2
3
4
5
var length = 16;                                  // Number 通过数字字面量赋值
var points = x * 10; // Number 通过表达式字面量赋值
var lastName = "Johnson"; // String 通过字符串字面量赋值
var cars = ["Saab", "Volvo", "BMW"]; // Array 通过数组字面量赋值
var person = {firstName:"John", lastName:"Doe"}; // Object 通过对象字面量赋值

注释

可以用//123456
可多行注释以 /* 开始,以 */ 结尾。

对代码行进行折行

可用以下输出你好 世界!

1
2
document.write("你好 \
世界!");

不可(报错)

1
2
document.write \ 
("你好世界!");

输出

JavaScript 没有任何打印或者输出的函数,但可通过以下方法来输出数据:

使用 window.alert() 弹出警告框。

1
2
3
<script>
window.alert(5 + 6);
</script>

显示11

使用 document.write() 方法将内容写到 HTML 文档中 使用innerHTML 写入到 HTML 元素。

如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) 方法。使用 “id” 属性来标识 HTML 元素,并 innerHTML 来获取或插入元素内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<html>
<body>

<p id="demo">我的第一个段落</p>

<script>
document.getElementById("demo").innerHTML = "段落已修改。";
</script>
<script>
document.write(Date());
</script>

</body>
</html>

显示:

1
2
3
我的第一个 Web 页面
段落已修改。
Thu Oct 14 2021 19:51:02 GMT+0800 (中国标准时间)

这种写入有覆盖的顺序,以上代码是在加载HTML时便写入,而以下是后来写入则会覆盖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
<body>

<h1>我的第一个 Web 页面</h1>

<p>我的第一个段落。</p>

<button onclick="myFunction()">点我</button>

<script>
function myFunction() {
document.write(Date());
}
</script>

</body>
</html>

使用 console.log() 写入到浏览器的控制台。

如果您的浏览器支持调试,可以使用 console.log() 方法在浏览器中显示 JavaScript 值。

w3school教程

概要

简单来说就是独立的

什么是 CSS?

  • CSS 指的是层叠样式表 (Cascading Style Sheets)
  • CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素
  • CSS 节省了大量工作。它可以同时控制多张网页的布局
  • 外部样式表存储在 CSS 文件

    CSS 解决了一个大问题

    HTML 从未打算包含用于格式化网页的标签!
    创建 HTML 的目的是_描述网页_的内容
    将 <font> 之类的标签和 color 属性添加到 HTML 3.2 规范后,Web 开发人员的噩梦开始了。大型网站的开发将字体和颜色信息添加到每个页面中,这演变为一个漫长而昂贵的过程。
    为了解决这个问题,万维网联盟(W3C)创建了 CSS。
    CSS 从 HTML 页面中删除了样式格式!

    CSS 节省了大量工作!

    样式定义通常保存在外部 .css 文件中。
    通过使用外部样式表文件,您只需更改一个文件即可更改整个网站的外观!

语法

CSS 规则集(rule-set)由选择器声明块组成:
CSS 选择器
选择器指向您需要设置样式的 HTML 元素。
每条声明都包含一个 CSS 属性名称和一个值,以:冒号分隔。
多条 CSS 声明用;分号分隔,声明块用{}花括号括起来。
例:(在此例中,所有 <p> 元素都将居中对齐,并带有红色文本颜色:)

1
2
3
4
p {
color: red;
text-align: center;
}
  • p 是 CSS 中的_选择器_(它指向要设置样式的 HTML 元素:<p>)。
  • color 是属性,red 是属性值
  • text-align 是属性,center 是属性值

    注释

    位于 <style> 元素内的 CSS 注释,以 /* 开始,以 */ 结束

    在HTML中使用

    选择器

    选择器用于“查找”(或选取)要设置样式的 HTML 元素。
    选择器 例子 例子描述 概述
    .class .intro 选取所有 class=”intro” 的元素。 类选择器选择有特定 class 属性的 HTML 元素。
    #id #firstname 选取 id=”firstname” 的那个元素。 id 选择器使用 HTML 元素的 id 属性来选择特定元素。
    * * 选取所有元素。 通用选择器(*)选择页面上的所有的 HTML 元素。
    element p 选取所有 <p> 元素。 元素选择器根据元素名称来选择 HTML 元素。
    element,element,.. div, p 选取所有 <div> 元素和所有 <p> 元素。

    外部样式表

    当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观。
    1
    2
    3
    <head>
    <link rel="stylesheet" type="text/css" href="style.css">
    </head>

    内部样式表

    当单个文件需要特别样式时,就可以使用内部样式表。你可以在 head 部分通过 <style> 标签定义内部样式表。
    1
    2
    3
    4
    5
    6
    <head>
    <style type="text/css">
    body {background-color: red}
    p {margin-left: 20px}
    </style>
    </head>

    内联样式

    当特殊的样式需要应用到个别元素时,就可以使用内联样式。 使用内联样式的方法是在相关的标签中使用样式属性。样式属性可以包含任何 CSS 属性。以下实例显示出如何改变段落的颜色和左外边距。
    1
    2
    3
    <p style="color: red; margin-left: 20px">
    This is a paragraph
    </p>

w3school教程

初探

  • HTML 指的是超文本标记语言 (Hyper Text Markup Language)
  • HTML 不是一种编程语言,而是一种标记语言 (markup language)
    • HTML 指的是超文本标记语言 (Hyper  Text  Markup  Language)
    • HTML 不是一种编程语言,而是一种 标记语言  (markup language)

以上MD写法

1
2
*   HTML 指的是超文本标记语言 (**H**yper **T**ext **M**arkup **L**anguage)
* HTML 不是一种编程语言,而是一种*标记语言* (markup language)

以上HTML写法

1
2
3
4
5
6
7
8
9
<ul>
<li>HTML 指的是超文本标记语言 (<b>H</b>yper
<span>&nbsp;</span><b>T</b>ext
<span>&nbsp;</span><b>M</b>arkup
<span>&nbsp;</span><b>L</b>anguage)</li>
<li>HTML 不是一种编程语言,而是一种
<em>标记语言</em>
<span>&nbsp;</span>(markup language)</li>
</ul>

标签

基础

1
2
3
4
5
6
7
8
9
<html>
<body>

<h1>我的第一个标题</h1>

<p>我的第一个段落。</p>

</body>
</html>
  • <html> 与 </html> 之间的文本描述网页
  • <body> 与 </body> 之间的文本是可见的页面内容
  • <h1> 与 </h1> 之间的文本被显示为标题(h后面的数字表示第几级标签)
  • <p> 与 </p> 之间的文本被显示为段落,浏览器会自动地在段落的前后添加空行。(<p> 是块级元素)
    1
    <a href="https://dyinjin.github.io/">This is my link</a>
  • HTML 链接是通过 <a> 标签进行定义的。
    1
    <img src="test.jpg" width="104" height="142" />
  • HTML 图像是通过 <img> 标签进行定义的(同级目录开始)

一般的元素标签都应该有头有尾,但也有本身不需要中间内容的空标签如:<br> 标签定义换行(可用在同段落中换行),则一般建议写为<br />(还有<hr /> 标签在 HTML 页面中创建水平线。)


HTML 标签对大小写不敏感,而万维网联盟(W3C)在 HTML 4 中推荐使用小写,而在未来 (X)HTML 版本中强制使用小写。
1
<!--这是一段注释-->

同样类似(css中可使用)
/* 这是一段注释 */

当显示页面时,浏览器会移除源代码中多余的空格和空行。所有连续的空格或空行都会被算作一个空格。需要注意的是,HTML 代码中的所有连续的空行(换行)也被显示为一个空格。

h1标题标签的注意

请确保将 HTML heading 标签只用于标题。不要仅仅是为了产生粗体或大号的文本而使用标题。
搜索引擎使用标题为您的网页的结构和内容编制索引。
因为用户可以通过标题来快速浏览您的网页,所以用标题来呈现文档结构是很重要的。

属性

HTML 标签可以拥有属性。属性提供了有关 HTML 元素的更多的信息。
属性总是以名称/值对的形式出现,比如:name=”value”。

1
2
3
<body bgcolor="yellow">
<h2>改背景颜色</h2>
</body>
  • 注:background-color 属性为元素定义了背景颜色:<body style=”background-color:yellow”></body>此style 属性淘汰了“旧的” bgcolor 属性。

属性总是在 HTML 元素的开始标签中规定。
属性值应该始终被包括在引号内。双引号是最常用的,不过使用单引号也没有问题。
在某些个别的情况下,比如属性值本身就含有双引号,那么您必须使用单引号,例如:<pre>name=’Bill “HelloWorld” Gates’</pre>
| 属性 | 值 | 描述 |
| — | — | — |
| class | classname | 规定元素的类名(classname) |
| id | id | 规定元素的唯一 id |
| style | style_definition | 规定元素的行内样式(inline style) |
| title | text | 规定元素的额外信息(可在工具提示中显示) |

style属性

提供了一种改变所有 HTML 元素的样式的通用方法。
样式是 HTML 4 引入的,它是一种新的首选的改变 HTML 元素样式的方式。通过 HTML 样式,能够通过使用 style 属性直接将样式添加到 HTML 元素,或者间接地在独立的样式表中(CSS 文件)进行定义。
而某些标签和属性建议用同样效果的样式代替:

1
2
<p style="font-family:arial;color:red;font-size:20px;">A red paragraph.</p>
<p><font size="5" face="arial" color="red">A red paragraph.</font></p>
1
2
<h1 style="text-align:center">This is a center</h1>
<h1 align="center">This is center 1</h1>

颜色

仅仅有 16 种颜色名被 W3C 的 HTML4.0 标准所支持。它们是:aqua, black, blue, fuchsia, gray, green, lime, maroon, navy, olive, purple, red, silver, teal, white, yellow。如果需要使用其它的颜色,需要使用十六进制的颜色值。

HTML与CSS

如何使用样式?
当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化。有以下三种方式来插入样式表:

外部样式表

当样式需要被应用到很多页面的时候,外部样式表将是理想的选择。使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观。

1
2
3
<head>
<link rel="stylesheet" type="text/css" href="style.css">
</head>

内部样式表

当单个文件需要特别样式时,就可以使用内部样式表。你可以在 head 部分通过 <style> 标签定义内部样式表。

1
2
3
4
5
6
<head>
<style type="text/css">
body {background-color: red}
p {margin-left: 20px}
</style>
</head>

内联样式

当特殊的样式需要应用到个别元素时,就可以使用内联样式。 使用内联样式的方法是在相关的标签中使用样式属性。样式属性可以包含任何 CSS 属性。以下实例显示出如何改变段落的颜色和左外边距。

1
2
3
<p style="color: red; margin-left: 20px">
This is a paragraph
</p>

暂时记这么多

哈希简谈(sha_256)

就是对任意长度字符数据都会生成唯一的长度为256bit长的哈希值,且不可逆的一种加密方式
哈希函数,又称散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(或哈希值)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。

概要

主要参照:简易区块链C语言实现
博主讲得很清楚,简洁易懂,适合初学区块链

区块链数据结构

1633843973844
具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef union{
unsigned char byte[104];//与以下结构体等长,利用了联合的特性
struct{
unsigned char sha_all[32];//对本区块head、body进行SHA256运算(且最终保证满足前导0要求)的结果
unsigned long nonce;//随机数,目的是在不改变其它有意义数据的情况下使每次哈希结果改变直到最后能够生成满足要求前导0
unsigned char sha_prev[32];//保存上一个区块的sha_all
unsigned char sha_block[32];//对本区块body进行SHA256运算的结果,可视为经过不可逆加密后的数据
};
}block_head;//区块链核心,目的是保证不可篡改性

typedef struct{
char body[1000];
}block_body;//实际数据

typedef struct{
block_head head;
block_body body;
}block;

总之HEAD是核心,nonce的意义就在满足前导0要求,而前导0(不一定要求为0)的位数某种程度上控制了哈希运算的加密难度(复杂度)(比特币要靠挖就是算这个费算力),正因为有此不定的数据存在,使得哈希运算次数不定,则即使哈希加密可逆也无法解密出整个区块链保存的数据。又由于sha_all关联于sha_prev与sha_block,则任意修改区块链中的body数据,会使得sha_block不同,进而sha_all不同,直接影响了sha_prev无法衔接,可轻易识别非法修改数据。

这里前导0只要求两位(不然算的慢):

1
2
3
4
5
int check_sha(BYTE text[32]){  // 检验是否为前导0
if(text[0]==0x00)
return 1;
return 0;
}

初始化程序

基本上掌握初始化原理就差不多弄得懂了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void init(){
block_head* gen=malloc(104);
block_body gbody;
strcpy(gbody.body,"helloworldjin");//创世信息,后面的区块就在此存数据了
memset(gen->byte,0,104);//初始化0
sha256_main(gbody.body,strlen(gbody.body),gen->sha_block);//将body信息哈希一次

while(gen->nonce<0xffffffffffffffff){//一直哈希直到满足前导
BYTE text[10200];//暂存块头块体
read_head_body(text,gen,gbody);//块头快体写入

BYTE buf[32];//暂存加密后的块头块体
size_t textsize=104-32+strlen(gbody.body);//(注意要减去32 sha_all)
sha256_main(text,textsize,buf);//text存的块头快体一起哈希

printf("当前nonce为: %lu ",gen->nonce);
printf("前8bit为:%02x\n",buf[0]);

if(check_sha(buf)){// 检查是否为前导0
//成功则记录区块
printf("创世块nonce为:%lu\n",gen->nonce);

//文件写入处理
const char* filename = "genesis.block";
FILE *fp = fopen(filename,"w");
int i;
for (i=0;i<32;i++) {
gen->sha_all[i] = buf[i];//加密后的块头块体哈希值
}
for (i=0;i<104;i++) { // 写入区块头(包含加密后的本块块头块体哈希值,nonce随机数,sha_prev上个区块加密后的块头块体哈希值,sha_block本块数据哈希值)
fprintf(fp,"%c",gen->byte[i]);
}
for (i=0;i<strlen(gbody.body);i++) { // 写入区块体(包含直接的数据)
fprintf(fp,"%c",gbody.body[i]);
}
fclose(fp);
break;
}
gen->nonce++;
}
}

考虑加入时间戳是否就是在最后通过前导检测后,写入时多写一个时间关联数据,意义类似nonce随机数?

再分析一个函数

找最后一个块的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
block find_last_block(){
block block_list[100];//这个可以随便扩
const char *filePath = ".";
int size = read_dir_block(block_list,filePath); // 一共size个区块(简单根据文件名数),这里不只是算了个数字,还将每个文件数据导入到了block_list[i]
if (size <= 0) {
printf("no block file\n");//这个随便了
block tmp;
memset(tmp.head.byte, 0, 104);
return tmp;
}
// 然后给所有区块弄一个拓扑排序
// 先遍历找第一个 block
block topo[size];
BYTE hash[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//创世区块的前导(这里如果确定中间某一个块的前导值也可以中途开找)
int i,j;
for (i=0;i<size;i++) {
int cmp = memcmp(hash,block_list[i].head.sha_prev,32);
if(cmp == 0){ // equal, this is the first block
copy(&topo[0],&block_list[i]);
break;
}
}// topo[0] 为创世纪块

//双循环链接区块
for (i=1;i<size;i++) {
for (j=0;j<size;j++) {
int cmp = memcmp(topo[i-1].head.sha_all,block_list[j].head.sha_prev,32);
// 遍历所有区块,prev == topo[i-1] 的便是对应 topo[i]
if (cmp == 0) {
copy(&topo[i],&block_list[j]);
break;
}
}
}
return topo[size-1];//返回最后一个
}

自然可以简单修改为找对应需要数据区块的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
block find_block(char* content){        // 读各个区块
block block_list[100];
const char *filePath = ".";
int size = read_dir_block(block_list,filePath); // 一共 size 个区块
// 给所有区块弄一个拓扑排序
if (size <= 0) {
printf("no block file\n");
block tmp;
memset(tmp.head.byte, 0, 104);
return tmp;
}
// 先找第一个 block
block topo[size];
BYTE hash[32] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int i,j;
for (i=0;i<size;i++) {
int cmp = memcmp(hash,block_list[i].head.sha_prev,32);
if(cmp == 0){ // equal, this is the first block
copy(&topo[0],&block_list[i]);
break;
}
}
// topo[0] 为创世纪块
for (i=1;i<size;i++) {
for (j=0;j<size;j++) {
int cmp = memcmp(topo[i-1].head.sha_all,block_list[j].head.sha_prev,32);
// 遍历所有区块,找到 prev == topo[i-1] 的,以此来确定 topo[i]
if (cmp == 0) {
copy(&topo[i],&block_list[j]);
break;
}
}
}
//从链接完的区块链topo排序中找
printf("start find *****************\n");
for(i=0;i<size;i++){
printf("\nbody:%s\n",topo[i].body.body);
if(strstr(topo[i].body.body,content)){
printf("\n****finded****\n");
break;
}
}
return topo[i];
}

可能复杂了,但是改的简单)

其实就是学别人代码

接口简述

比如:People是一个接口,他里面有say这个方法。
接口的定义:

1
2
3
public interface People{
public void say();//就是public abstract void say();
}

但是接口没有方法体。只能通过一个具体的类去实现其中的方法体。
比如 Chinese这个类,就实现了People这个接口。
接口的实现:

1
2
3
4
5
public class Chinese implements People{
public void say() {
System.out.println(" 你好!");
}
}

接口的调用:

1
2
People chinese = new Chinese() ;
chinese.say();

关于Awt

关于 MouseListener接口

  1. void mouseClicked(MouseEvent e) 在组件上单击(按下并释放)鼠标按钮时调用。
  2. void mouseEntered(MouseEvent e) 鼠标进入组件时调用 。
  3. void mouseExited(MouseEvent e) 鼠标退出组件时调用。
  4. void mousePressed(MouseEvent e) 在组件上按下鼠标按钮时调用。
  5. void mouseReleased(MouseEvent e) 在组件上释放鼠标按钮时调用。

实验与结合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package test;

import java.awt.BorderLayout;
import javax.swing.*;
import java.awt.event.*;


class Baton{
JFrame f = new JFrame("frame窗口");
JMenuBar menuBar = new JMenuBar();//创建菜单栏
JMenu fileMenu = new JMenu("DYJ");
JMenuItem testMenuItem = new JMenuItem("1");
JMenuItem exitMenuItem = new JMenuItem("2");//子选项

void view() {

f.setSize(300,200);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//叉号能关

menuBar.add(fileMenu);//一级菜单的创建与添加

fileMenu.add(testMenuItem);//子选项添加
fileMenu.addSeparator();//添加分割线
fileMenu.add(exitMenuItem);

exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("2 被点击");
}
});

f.setJMenuBar(menuBar);//设置到窗口
f.setVisible(true);//设置开启显示
}
}

public class test1 extends JFrame implements MouseListener {
private JTextArea jt = new JTextArea();
private JButton exit = new JButton("退出");
Baton baton=new Baton();

public test1() {
baton.view();
baton.testMenuItem.addMouseListener(this);

this.add(jt, BorderLayout.CENTER);
this.add(exit, BorderLayout.SOUTH);
this.setSize(500, 400);
this.setVisible(true);
this.setLocationRelativeTo(null);
exit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}

public static void main(String[] args) {
new test1();
}

public void mouseClicked(MouseEvent e) {// 单击鼠标时执行的操作
jt.append("鼠标单击了此文本区域\n");
}

public void mouseEntered(MouseEvent e) {// 鼠标进入组件时执行的操作
jt.append("鼠标进入了此文本区域\n");
}

public void mouseExited(MouseEvent e) {// 鼠标离开组件时执行的操作
jt.append("鼠标离开了此文本区域\n");
}

public void mousePressed(MouseEvent e) {// 鼠标在组件上按下时执行的操作
jt.append("在此文本区域你按下了鼠标\n");
}

public void mouseReleased(MouseEvent e) {// 鼠标释放时执行的操作
jt.append("鼠标按键释放了\n");
}

}

混合使用:
enter description here
6. getX(),getY():获取鼠标的坐标位置
7. getModifiers():获取鼠标的左或右键
8. getClickCount():获取鼠标被点击的次数
9. setCursor():控制鼠标指针的形状。如设置成漏斗:setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR))

关于 MouseMotionListener接口

  1. void mouseDragged(MouseEvent e) 在组件上按下鼠标按钮然后拖动时调用。
  2. void mouseMoved(MouseEvent e) 将鼠标光标移动到组件但未按下任何按钮时调用。
    简单例子:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    package test;

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.JFrame;
    import javax.swing.JButton;

    public class test2 implements MouseMotionListener {

    JFrame myframe; // JFrame通常默认使用BorderLayout布局管理器的
    TextArea tf;
    JButton exitButton;
    int number = 1;

    public test2() {
    Label label = new Label("click and drag the mouse");
    myframe = new JFrame("MyMouseMotionListener");
    tf = new TextArea();
    exitButton = new JButton("退出");

    tf.addMouseMotionListener(this);
    exitButton.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
    System.exit(0);
    }
    });

    myframe.add(label, BorderLayout.NORTH);
    myframe.add(tf, BorderLayout.CENTER);
    myframe.add(exitButton, BorderLayout.SOUTH);
    myframe.setSize(400, 300);
    myframe.setVisible(true);

    }

    public static void main(String[] args) {
    new test2();

    }

    @Override
    // 负责处理鼠标拖动事件
    public void mouseDragged(MouseEvent e) {
    //getX(),getY():获取鼠标的坐标位置
    String s = number++ + "" + "the mouse is draggered:x=" + e.getX()
    + "y=" + e.getY() + "\n";
    tf.append(s);
    }

    @Override
    // 负责处理鼠标移动事件
    public void mouseMoved(MouseEvent e) {
    String s = number++ + "" + "the mouse is moving:x=" + e.getX() + "y="
    + e.getY() + "\n";
    tf.append(s);
    }
    }
    效果:
    enter description here

关于Swing

跨平台性的更丰富的图形界面
enter description here

首先关于JFrame

窗体容器,Swing组件的载体。继承自Frame类。
并且可直接使用jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);关闭窗体

关于JDialog

对话框,继承自Dialog类,功能是从一个窗体钟弹出另一个窗体(类似子JFrame)
使用public JDialog(Frame f, String title, boolean model)创建一个指定窗体、标题和模式的对话框。

关于JLabel

JLabel类可以显示文本或图像。通过在显示区域中设置垂直和水平对齐来对齐标签的内容。默认情况下,标签在显示区域中垂直居中。默认情况下,纯文本标签前沿对齐; 默认情况下,仅图像标签水平居中。
例:

1
2
JLabel(Icon image, int horizontalAlignment);//使用指定的图像和水平对齐创建JLabel实例。
JLabel(String text, Icon icon, int horizontalAlignment);//使用指定的文本,图像和水平对齐创建JLabel实例。

中间容器JPanel

中间性区域安排

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package test;

import java.awt.GridLayout;
import java.awt.Color;
import javax.swing.*;

public class test3 {
public static void main(String[] args) {
JFrame jf=new JFrame();
jf.setLayout(new GridLayout(1,2,10,10));
JPanel jp=new JPanel(new GridLayout(2,2,10,10));
JPanel jp1=new JPanel(new GridLayout(2,2,10,10));
jp.add(new JButton("11"));
jp.add(new JButton("22"));
jp.add(new JButton("33"));
jp.setBackground(Color.green);
jp1.add(new JButton("111"));
jp1.add(new JButton("222"));
jf.add(jp);
jf.add(jp1);
jf.setSize(300,300);
jf.setVisible(true);
}

}

enter description here

关于JScrollPane

JScrollPane内只能添加一个组件,是一个带滚动条的面板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package test;

import java.awt.GridLayout;
import javax.swing.*;

public class test3 {
public static void main(String[] args) {
JFrame jf=new JFrame("DYJ");
JTextArea jta=new JTextArea(10,5);
jta.setText("test!!");
jf.setLayout(new GridLayout(1,2,10,10));
JPanel jp1=new JPanel(new GridLayout(2,2,10,10));
jp1.add(new JButton("111"));
jp1.add(jta);
JScrollPane jsp=new JScrollPane(jp1);
jf.add(jsp);
jf.setSize(300,300);
jf.setVisible(true);
}

}

enter description here
它在界面需要时才自动出现
enter description here

关于JMenuBar

JMenuBar,菜单栏。菜单栏组件添加到 JFrame 窗口后,在窗口的内容显示区域的顶部出现。实现一个菜单栏主要涉及三种类:

  1. JMenuBar 表示一个菜单栏。
  2. JMenu 表示菜单栏上的一个一级菜单。
  3. JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem 表示一级菜单下的一个子菜单项,三者分别表示 普通的子菜单、带复选框的子菜单、带单选按钮的子菜单。
    使用:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class Batton{
    void view() {
    JFrame f = new JFrame("frame窗口");
    f.setSize(300,200);
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//叉号能关

    JMenuBar menuBar = new JMenuBar();//创建菜单栏

    JMenu fileMenu = new JMenu("DYJ");
    menuBar.add(fileMenu);//一级菜单的创建与添加

    JMenuItem testMenuItem = new JMenuItem("1");
    JMenuItem exitMenuItem = new JMenuItem("2");//子选项

    fileMenu.add(testMenuItem);//子选项添加
    fileMenu.addSeparator();//添加分割线
    fileMenu.add(exitMenuItem);

    exitMenuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    System.out.println("2 被点击");
    }
    });

    f.setJMenuBar(menuBar);//设置到窗口
    f.setVisible(true);//设置开启显示
    }
    }
    效果:
    enter description here
    默认功能:
    1
    jRMItemEasy.setSelected(true);// 默认按钮选择

GNU

GUN’s Not Unix
开源操作系统(unix-like)
GNU是一个自由的操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU’s Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。

GCC

为GNU操作系统专门编写的一款编译器
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

GDB

UNIX下的程序调试工具
UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。

BSP

板级支持包
用作初始化与运行操作系统并用于评估板(Evaluation Board)的简易代码。板级支持包(BSP)(Board Support Package)是构建嵌入式操作系统所需的引导程序(Bootload)、内核(Kernel)、根文件系统(Rootfs)和工具链(Toolchain) 提供完整的软件资源包。

DSP

数字信号处理
大部分信号的初始形态是事物的运动变化,为了测量它们和处理它们,先要用传感器把它们的特征转换成电信号,等到这些电信号处理完后,再把它们转变为我们能看见、能听见或能利用的形态。
数字信号处理单元实际上是一个计算机,它按照指令对二进制的数字信号进行计算。例如,将声波信号与一个高频正弦波信号相乘,可实现幅度调制。实际上,数字信号往往还要变回模拟信号,才能发挥它的作用。例如,无线电是电磁波通过天线向外发射的,这时的电磁波只能是模拟信号。

PSP

一般来说PSP是256个字节,当程序生成了可执行文件以后,在执行时会先将程序调入内存,这个时候ds中存入程序在内存中的段地址,紧接着是程序的一些说明,比如程序占用多少空间等,这就是PSP,然后才是真正的程序地址,将cs指向这里,且ip设为0000h

BootLoader

在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

SOC片上系统

一个芯片就是一个系统,或将一个系统放在一个芯片中。SOC最大特点是实现了软/硬件的无缝结合,直接在处理器芯片内部嵌入操作系统代码模块

Linux

Linux操作系统简介 嵌入式 Linux 的特点:

  1. Linux 是开放源代码的;
  2. Linux 的内核小、效率高,内核的更新速度很快;
  3. Linux 是免费的 OS,在价格上极具竞争力

嵌入式 Linux 系统产品主要分为三类:

  • 第一:专门为 Linux 的嵌入式方向做的 如何让 Linux 更小、更容易嵌入到体积要求和功能、性 能要求更高的硬件中去,是产品的开发方向,如 Monta Vista 的Hard Hat Linux等。
  • 第二:专门为Linux的实时特性设计的产品 将 Linux 开发成实时操作系统,尤其是硬实时系统,应 用于一些关键的控制场合。如 Fsmlabs 公司的 RT-Linux。
  • 第三:将实时性和嵌入式方案结合起来的方案,并且提供集 成化的解决方案。如Lineo、TimeSys等。

VxWorks

VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS)。
VxWorks具有良好的持续发展能力、高性能的内核以及友好的用户开发环境,具有良好的可靠性和卓越的实时性,在嵌入式实时操作系统领域占据一席之地。
VxWorks被广泛的应用于通信、军事、航空、航天等 高精尖技术及实时性要求极高的领域中。如卫星通讯、军事演习、导弹制导、飞机导航等

WinCE

Windows CE 是一个全新开发的操作系统,是一个开放的、可裁剪的、32位的实时嵌入式窗口操作系统。
Windows CE 的基本特性如下:

  1. 适应小型系统,为低成本、计算能力较差的系统提供简洁、 高效、完善的控制机制;
  2. 支持多种处理器和计算机架构,并支持多种装置接口;
  3. 遵循Windows平台的应用开发规范,提供Win32API等;
  4. 操作系统各部分模块化,可根据特性定制,以适应ROM;
  5. 为应用程序提供网络通信、图形使用接口、数据库、档案 等支持;
  6. 支持实时应用;
  7. 提供进阶电源管理功能

uC/os-Ⅱ

uC/os-Ⅱ是一种基于优先级的抢占式多任务实时操作系统,包含了:实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能。
uC/os-Ⅱ可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实际应用程序的设计和扩展变得容易,使应用程序的设计过程大为简单。
uC/os-Ⅱ绝大部分的代码是用ANSI的C语言写的

pSOSystem

pSOSystem 是一个专门为嵌入式微处理器设计和开发的模块、高效率的实时操作系统。
pSOSystem 的每一部分都是完全“自包含”的,这种机制允许开发者根据每个应用的特殊要求,对操作系统的功能和内存进行裁剪和配置。
pSOSystem 提供了一套集成化的交叉开发工具,以支持应用系统的开发。该集成环境可在 PC 机或工作站上运行,这些工具可通过多种连接机制与目标机通信

uClinux

Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是”针对微控制领域而设计的Linux系统”。
uCLinux主要是针对目标处理器没有存储管理单元MMU(Memory Management Unit)的嵌入式系统而设计的。它已经被成功地移植到了很多平台上。由于没有MMU,其多任务的实现需要一定技巧。

ThreadX

ThreadX是小型RTOS的巅峰之作,通过了各行各业的安全认证,并且大部分都是最高安全标准,适用于深嵌入式应用中,具有规模小、实时性强、可靠性高、无产品版权费、易于使用等特点,并且支持大量的处理器和SoC
文件系统FileX、网络协议栈NetX十分优秀安全性突出

QNX

QNX是一个分布式、嵌入式、可规模扩展的硬实时操作系统,是一种商用的遵从可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX )规范的类Unix实时操作系统,在汽车领域,网络通信领域应用广泛在轨道交通、医疗器械、智能电网及航空航天中,都发挥着积极作用。

OSE

Operating System Embedded是具有性能高、代码小和可确定性实时操作系统。
OSE专门针对移动计算应用进行了优化,支持从基于DSP的基带处理到RISC的应用处理
特点:极高的处理能力 支持复杂的分布式系统 强大的容错能力 丰富的功能模块 广泛的应用 严格的安全认证 强大的第三方支持。

PalmOS

Palm OS是一种32 bit的嵌入式操作系统,广泛应用于移动终端设备特别是在PDA掌上电脑市场占据90%市场。
但随着掌上电脑市场的缩减也逐渐没落

Symbian

即塞班系统,是塞班公司为手机而设计的操作系统,也即曾经的诺基亚手机的主要操作系统.
2011年11月,塞班在全球的市场占有率降至22.1%,霸主地位已彻底被Android取代,中国市场占有率则降为23%。12月21日,诺基亚宣布放弃Symbian品牌。

TIPS

关于后缀

  • long/int
    1
    long x=9999999999L;//超出2^31必须加L/l
  • double/float
    1
    float x=10.0F;//不加F/f将丢失精度,默认double型
    关于转换
  • 自动转换
    数值型数据的转换:byte→short→int→long→float→double
    字符型转换为整型:char→int
    实例程序:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    /*
    PrimitiveOverloading.java, 拓宽类型的方法过载
    */
    public class PrimitiveOverloading {
    // 布尔类型不能自动转换
    static void prt(String s) {System.out.println(s);}
    void f1(char x) {prt("f1(char)"); }
    void f1(byte x) {prt("f1(byte)"); }
    void f1(short x) {prt("f1(short)"); }
    void f1(int x) {prt("f1(int)");}
    void f1(long x) {prt("f1(long)"); }
    void f1(float x) {prt("f1(float)"); }
    void f1(double x) { prt("f1(double)"); }

    void f2(byte x) { prt("f2(byte)"); }
    void f2(short x) { prt("f2(short)"); }
    void f2(int x) { prt("f2(int)"); }
    void f2(long x) { prt("f2(long)"); }
    void f2(float x) { prt("f2(float)"); }
    void f2(double x) { prt("f2(double)"); }

    void f3(short x) { prt("f3(short)"); }
    void f3(int x) { prt("f3(int)"); }
    void f3(long x) { prt("f3(long)"); }
    void f3(float x) { prt("f3(float)"); }
    void f3(double x) { prt("f3(double)"); }

    void f4(int x) { prt("f4(int)"); }
    void f4(long x) { prt("f4(long)"); }
    void f4(float x) { prt("f4(float)"); }
    void f4(double x) { prt("f4(double)"); }

    void f5(long x) { prt("f5(long)"); }
    void f5(float x) { prt("f5(float)"); }
    void f5(double x) { prt("f5(double)"); }

    void f6(float x) { prt("f6(float)"); }
    void f6(double x) { prt("f6(double)"); }

    void f7(double x) { prt("f7(double)"); }

    void testConstVal() {
    prt("Testing with 5");
    f1(5); f2(5);f3(5);f4(5); //java中常数的默认类型是int型,调用void fx(int x) { prt("fx(int)"); }
    f5(5);//5为int型,f5无int参数,向上转换为f5(long x) { prt("f5(long)"); }
    f6(5); //5为int型,f6无int、long参数方法,向上转换为void f6(float x) { prt("f6(float)"); }
    f7(5);//5为int型,f7无int、long、float参数方法,向上转换为void f7(double x) { prt("f7(double)"); }
    }
    void testChar() {
    char x = 'x';
    prt("char argument:");
    f1(x); //自动匹配void f1(char x) {prt("f1(char)"); }
    f2(x);f3(x);f4(x); //'x'为char类型,向上转换为void fx(int x) { prt("fx(int)"); }
    f5(x);//'x'为char类型,f5无char、int型,向上转换为f5(long x) { prt("f5(long)"); }
    f6(x);//'x'为char类型,f6无char、int、long型,向上转换为void f6(float x) { prt("f6(float)"); }
    f7(x);//'x'为char类型,f7无char、int、long、float型,向上转换为void f7(double x) { prt("f7(double)"); }
    }
    void testByte() {
    byte x = 0;
    prt("byte argument:");
    f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testShort() {
    short x = 0;
    prt("short argument:");
    f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testInt() {
    int x = 0;
    prt("int argument:");
    f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testLong() {
    long x = 0;
    prt("long argument:");
    f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testFloat() {
    float x = 0;
    prt("float argument:");
    f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    void testDouble() {
    double x = 0;
    prt("double argument:");
    f1(x);f2(x);f3(x);f4(x);f5(x);f6(x);f7(x);
    }
    public static void main(String[] args) {
    PrimitiveOverloading p = new PrimitiveOverloading();
    p.testConstVal();
    p.testChar();
    p.testByte();
    p.testShort();
    p.testInt();
    p.testLong();
    p.testFloat();
    p.testDouble();
    }
    }
  • 变量声明作用域在一个块内(一对大括号内)
  • 当两个类创建在同一个项目下,同一个包下则可以不使用import,就可以直接调用另一个类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class MyDate {
    int year;
    int month;
    int day;
    }
    public class MyDateTest{
    public static void main(String[] args){
    MyDate date = new MyDate();
    date.year = 2021;
    date.month = 9;
    date.day = 22;
    System.out.println("The day is " + date.year
    + "-"+ date.month + "-"+ date.day);
    }
    }

    就是打印字符串,只是使用类来做了数据储存,类似结构体
    下面看一个复杂一点的:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    package test;

    class Location {
    int a=-1, b=-1;
    }

    class Point {
    int x, y;
    Point() {
    x = 20;
    y = 30;
    }
    void getData(int xValue, int yValue) {
    xValue = 100;
    yValue = 200;
    }
    void getLocation(Location locRef) {
    locRef.a = x;//就是20
    locRef.b = y;
    }
    }

    public class test0 {
    public static void main(String[] args){
    Point p = new Point();
    System.out.println("Object p’s value:");
    System.out.println("p.x = " + p.x +" p.y = " + p.y);

    int xVal = -1, yVal = -1;
    p.getData(xVal,yVal);//传参不改变原值
    System.out.println("Pass by value:");
    System.out.println("xVal = " + xVal +" yVal = " + yVal);

    Location loc = new Location();
    p.getLocation(loc);//引用可改变值
    System.out.println("Pass by reference:");
    System.out.println("xVal = " + loc.a + " yVal = " +loc.b);
    }
    }

    再看一个带返回值的:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    import java.util.Scanner;

    public class TestReturnValue{
    public static void main(String args[]){
    Scanner input=new Scanner(System.in);
    int testScore = input.nextInt();
    printGrade(testScore) ; //调用返回类型Void方法
    char ret=getGrade(testScore); //调用返回类型非Void方法
    System.out.println(ret);
    }
    public static void printGrade(double testscore){ //返回类型为void,可以有return,但是不能带表示式。
    if (testscore<0 || testscore>100){
    System.out.println("成绩输入错误");
    return; //中断程序,该方法后面语句不会被执行,可以试一下,如果注释掉该行的执行情况
    }
    if (testscore>=90.0){
    System.out.println('A');
    }else if(testscore>=80.0){
    System.out.println('B');
    }else if(testscore>=70.0){
    System.out.println('C');
    }else if(testscore>=60.0){
    System.out.println('D');
    }else {
    System.out.println('F');
    }
    }
    public static char getGrade(double testscore){ //返回类型非void,则需要return+表示式。

    if (testscore<0 || testscore>100){
    return 'N';
    }else if (testscore>=90.0){
    return 'A';
    }else if(testscore>=80.0){
    return 'B';
    }else if(testscore>=70.0){
    return 'C';
    }else if(testscore>=60.0){
    return 'D';
    }else {
    return 'F';
    }
    }
    }

    基本和C一样

函数

使用关键字def来告诉Python你要定义一个 函数,在这里,函数名为greet_user(),它不需要任何信息就能完成其工作,因此括号是空的(即便如此,括号也必不可少)。最后,定义以冒号结尾。

1
def greet_user():

可混合使用位置实参、关键字实参和默认值

  • 如使用 title() 将example转换为 首字母大写格式
    1
    example.title():

有时候,需要让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。可 使用默认值来让实参变成可选的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def get_formatted_name(first_name, last_name, middle_name=''):
"""返回整洁的姓名"""
if middle_name:
full_name = first_name + ' ' + middle_name + ' ' + last_name

else:
full_name = first_name + ' ' + last_name

return full_name.title()


musician = get_formatted_name('jimi', 'hendrix')
print(musician)

musician = get_formatted_name('john', 'hooker', 'lee')
print(musician)


向函数传递列表:

1
2
3
4
5
6
7
8
9
10
def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
for name in names:
msg = "Hello, " + name.title() + "!"
print(msg)


usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)


函数列表示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def print_models(unprinted_designs, completed_models): 
"""模拟打印每个设计,直到没有未打印的设计为止 打印每个设计后,都将其移到列表completed_models中"""
while unprinted_designs:
current_design = unprinted_designs.pop()
#模拟根据设计制作3D打印模型的过程
print("Printing model: " + current_design)
completed_models.append(current_design)


def show_completed_models(completed_models):
"""显示打印好的所有模型"""
print("\nThe following models have been printed:")
for completed_model in completed_models:
print(completed_model)


unprinted_designs = ['iphone case', 'robot pendant', 'dodecahedron']
completed_models = []

print_models(unprinted_designs, completed_models)
show_completed_models(completed_models)


禁止函数修改列表
要将列表的副本传递给函数,可以像下面这样做:

1
function_name(list_name[:])
  • 切片表示法[:]创建列表的副本

有时候,你预先不知道函数需要接受多少个实参,好在Python允许函数从调用语句中收集任意数量的实参
形参名 *toppings 中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封 装到这个元组中

使用任意数量的关键字实参

1
2
3
4
5
6
7
8
9
10
def build_profile(first, last, **user_info):
profile = {}
……
for key, value in user_info.items():
profile[key] = value
return profile


user_profile = build_profile('albert', 'einstein', location='princeton', field='physics')

形参 **user_info 中的两个星号让Python创建一个名为user_info的空字典,并将收到的所 有名称—值对都封装到这个字典中。在这个函数中,可以像访问其他字典那样访问user_info中的 名称—值对


导入整个模块
要让函数是可导入的,得先创建模块
pizza.py(模块名是文件名):

1
2
3
4
5
6
7
def make_pizza(size, *toppings):
"""概述要制作的比萨"""
print("\nMaking a " + str(size) +"-inch pizza with the following toppings:")

for topping in toppings:
print("- " + topping)

我们在pizza.py所在的目录中创建另一个名为making_pizzas.py的文件,这个文件导入刚创建的模块,再调用make_pizza()两次:
making_pizzas.py:

1
2
3
4
import pizza
pizza.make_pizza(16, 'pepperoni')
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')

Python读取这个文件时,代码行import pizza让Python打开文件pizza.py,并将其中的所有函数都复制到这个程序中
要调用被导入的模块中的函数,可指定导入的模块的名称pizza和函数名make_pizza(),并用句点分隔它们

你还可以导入模块中的特定函数,这种导入方法的语法如下:

1
from module_name import function_name

或使用 as 给函数/模块指定别名

1
from pizza import make_pizza as mp
1
import pizza as p

导入模块中的所有函数
使用星号(*)运算符可让Python导入模块中的所有函数

1
from pizza import *

列表

  1. 在列表末尾添加元素:
    1
    motorcycles.append('ducati')
    方法append()将元素’ducati’添加到了列表末尾
  2. 在列表中插入元素:
    1
    motorcycles.insert(0, 'ducati')	
    使用方法insert()可在列表的任何位置添加新元素这种操作将列表中既有的每个元素都右移一个位置
  3. 使用del语句删除元素:
    1
    del motorcycles[0] 
    已知位置[0]
  4. 使用方法pop()删除元素:
    1
    motorcycles.pop()
    方法pop()可删除列表末尾的元素,并让你能够接着使用它。实际上,你可以使用pop()来删除列表中任何位置的元素,只需在括号中指定要删除的元素 的索引即可:motorcycles.pop(0)
  5. 根据值删除元素 如果你只知道要删除的元素的值,可使用方法remove()
    1
    motorcycles.remove('ducati')
    让Python确定’ducati’出现在列表的什么地方,并将该元素删除,方法remove()只删除第一个指定的值。
  6. 使用方法 sort()对列表进行永久性排序
    方法sort()永久性地修改了列表元素的排列顺序按字母顺序。你还可以按与字母顺序相反的顺序排列列表元素,只需向sort()方法传递参数 reverse=True。XXX.sort(reverse=True)
  7. 使用函数 sorted()对列表进行临时排序
    要保留列表元素原来的排列顺序,同时以特定的顺序呈现它们,可使用函数sorted()。
    函数 sorted()让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。
    1
    2
    3
    print("Here is the original list:") print(cars)
    print("\nHere is the sorted list:") print(sorted(cars))
    print("\nHere is the original list again:") print(cars)
  8. 倒着打印列表可使用方法reverse()。
    注意,reverse()不是指按与字母顺序相反的顺序排列列表元素,而只是反转列表元素的排列顺序
  9. 确定列表的长度
    使用函数len()可快速获悉列表的长度
  10. 当需要访问最后一个列表元素时,都可使用索引-1。
    1
    print(motorcycles[-1])
  11. 遍历整个列表
    1
    2
    for magician in magicians:
    print(magician)
    第一行代码让Python获取列表magicians中的第一个值(’alice’),并将其存储到变量magician 中。
  12. 使用函数 range()使用函数 range()来打印一系列的数字:
    1
    2
    for value in range(1,5): 
    print(value)
    上述代码好像应该打印数字1~5,但实际上它不会打印数字5
    range()让Python从你指定的第一个值开始数,并在到达你指定的第二个值后停止,因此输出不包含第二个值(这里为5)。
  13. 使用 range()创建数字列表
    使用函数range()时,还可指定步长。
    例如,下面的代码打印1~10内的偶数:
    1
    2
    even_numbers = list(range(2,11,2)) 
    print(even_numbers)
    在这个示例中,函数range()从2开始数,然后不断地加2,直到达到或超过终值因此输出如下[2, 4, 6, 8, 10]
  14. 在Python中,两个星号(**)表示乘方运算。下面的代码演示了 如何将前10个整数的平方加入到一个列表中
    1
    2
    3
    4
    5
    squares = [] 
    for value in range(1,11):
    square = value**2
    squares.append(square)
    print(squares)
  15. 对数字列表执行简单的统计计算
    你可以轻松地找出数字列表的最大值、 最小值和总和:
    1
    2
    3
    4
    5
    6
    7
    >>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] 
    >>> min(digits)
    0
    >>> max(digits)
    9
    >>> sum(digits)
    45
  16. 列表解析
    前面介绍的生成列表squares的方式包含三四行代码,而列表解析让你只需编写一行代码就 能生成这样的列表。
    1
    2
    squares = [value**2 for value in range(1,11)]
    print(squares)
  17. 切片使用列表的一部分
    1
    2
    players = ['charles', 'martina', 'michael', 'florence', 'eli'] 
    print(players[0:3])
    代码打印该列表的一个切片,其中只包含三名队员。输出也是一个列表,其中包含前三名队员
    你可以生成列表的任何子集,例如如果你要提取列表的第2~4个元素,可将起始索引指定 为1,并将终止索引指定为4
    print(players[1:4])

没有指定起始索引,Python从列表开头开始提取
print(players[:4])

Python将返回从第3个元素到列表末尾的所有元素
print(players[2:])

打印最后三名队员的名字,即便队员名单的长度发生变化,也依然如此
print(players[-3:])
18. 遍历切片
可在for循环中使用切片
for player in players[:3]
代码没有遍历整个队员列表,而只遍历前三名队员
19. 复制列表
你经常需要根据既有列表创建全新的列表。下面来介绍复制列表的工作原理,以及复制列表 可提供极大帮助的一种情形。 要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])

1
2
friend_foods = my_foods[:] #正确
friend_foods = my_foods #错误
  1. 定义元组
    元组看起来犹如列表,但使用圆括号而不是方括号来标识。定义元组后,就可以使用索引来访问其元素,就像访问列表元素一样。 例如如果有一个大小不应改变的矩形,可将其长度和宽度存储在一个元组中,从而确保它们是不能修改的:
    1
    2
    3
    dimensions = (200, 50) 
    print(dimensions[0])
    print(dimensions[1])
  2. 虽然不能修改元组的元素,但可以给存储元组的变量赋值。因此,如果要修改前述矩形的尺寸,可重新定义整个元组:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dimensions = (200, 50) 
    print("Original dimensions:")
    for dimension in dimensions:
    print(dimension)

    dimensions = (400, 100)
    print("\nModified dimensions:")
    for dimension in dimensions:
    print(dimension)
    我们首先定义了一个元组,并将其存储的尺寸打印了出来;接下来,将一个新元组 存储到变量dimensions中;然后,打印新的尺寸。这次,Python不会报告任何错 误,因为给元组变量赋值是合法的:
  3. python中创建二维列表
    创建方法:
  • 直接创建:
    1
    2
    3
    a=[[0,0,0],[0,0,0],[0,0,0]]
    a[0][0]=1
    print(a)
    输出结果:[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
    2、列表生成法
    1
    2
    3
    #4列 2行
    a=[[0]*4 for i in range(2)]
    print(a)
    输出结果:[[0, 0, 0, 0], [0, 0, 0, 0]]
    3、使用numpy库
    1
    2
    3
    import numpy
    a=numpy.zeros((2,4))
    print(a)
    输出结果:
    [[0. 0. 0. 0.]
    [0. 0. 0. 0.]]

百度百科

区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。

  • 去中心化。区块链技术不依赖额外的第三方管理机构或硬件设施,没有中心管制,除了自成一体的区块链本身,通过分布式核算和存储,各个节点实现了信息自我验证、传递和管理。去中心化是区块链最突出最本质的特征。
  • 开放性。区块链技术基础是开源的,除了交易各方的私有信息被加密外,区块链的数据对所有人开放,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透。
  • 独立性。基于协商一致的规范和协议(类似比特币采用的哈希算法等各种数学算法),整个区块链系统不依赖其他第三方,所有节点能够在系统内自动安全地验证、交换数据,不需要任何人为的干预。
  • 安全性。只要不能掌控全部数据节点的51%,就无法肆意操控修改网络数据,这使区块链本身变得相对安全,避免了主观人为的数据变更。
  • 匿名性。除非有法律规范要求,单从技术上来讲,各区块节点的身份信息不需要公开或验证,信息传递可以匿名进行。

    实际实现

    简易区块链

    一个简易的区块链,必须有下面几个功能:
  • 生成创世纪块
  • 读取文件夹下的所有区块
  • 查找创世纪块
  • 查找区块链的最后一个区块
  • 在区块链的尾部追加区块
  • 对区块的SHA计算
    enter description here
    一个块Block一般有:
  • index 块号
  • previousHash 上一个区块的hash值
  • timestamp 时间戳
  • data 存放的数据
  • hash 区块的hash值
    我们每生成一个区块,我们都会给这个区块按照特定的hash算法,来得到一个hash值,一般来说,只要这个区块的index,previoushash,timestamp,data有改动,那么它所算出的hash值也会改变,所以当你想要篡改某个区块的数据时,你需要将后面所有的区块的previoushash都进行篡改。

区块链的数据结构
区块链的简单实现
简易区块链C语言实现
区块链学习
SHA256算法原理详解

2021/08/29 20:46 12,798,561 [[[[重要 不要创建世界时使用]]]]【群系】【前置4】CavesAndCliffsBackport-1.16.5-6.3.jar
2021/04/24 04:52 23,054 【优化】【前置15】byg群系生成修复chocolate-1.3.0-1.16.4.jar
2021/09/09 00:56 10,475 【优化】储物抽屉优化drawerfps-2.1.jar.disabled
2021/07/19 18:33 98,900 【优化】区块加载ferritecore-2.0.5-forge.jar
2021/04/26 08:04 437,841 【优化】区块预加载Chunk Pregenerator-V1.16-3.0.5.jar
2021/07/20 22:25 129,304 【优化】合成冲突化解polymorph-forge-1.16.5-0.25.jar
2021/10/17 21:26 1,675,339 【优化】地形生成TerraForged-1.16.5-0.2.16-BETA-2 .jar
2021/07/19 14:56 60,714 【优化】实体优化EntityCulling-1.16.5-2.1.6.jar
2021/04/10 00:04 84,744 【优化】平滑加载smoothboot-forge-1.16.4-1.2.2.jar
2021/07/20 23:04 94,028 【优化】模组目录catalogue-1.2.1-1.16.5.jar
2021/07/20 23:05 72,657 【优化】模组设置configured-1.1.0-1.16.5.jar
2021/05/04 07:33 13,677 【优化】渲染优化(针对多人) out_of_sight-1.16.4-1.0.1.jar
2021/07/19 14:53 232,291 【优化】生物AI优化performant-1.16.2-5-3.71m.jar
2021/07/19 15:42 19,038 【优化】生物群系修复(争对新添加群系)biomeidfixer-1.16.5-1.0.1.s4.jar
2021/04/17 01:14 423,940 【优化】(补丁)随意修复randompatches-2.4.4-forge.jar
2021/07/06 15:29 947,047 【前置01】abnormals_core-1.16.5-3.2.0.jar
2021/07/21 21:33 812,772 【前置10】【辅助】jei-1.16.5-7.7.1.110.jar
2021/07/19 15:23 43,358 【前置11】expandability-2.0.1-forge.jar
2021/07/19 15:51 592,958 【前置12】帕秋莉Patchouli-1.16.4-53.1.jar
2021/09/03 16:02 3,365,639 【前置13】【生物】【前置12】mysticalworld-1.16.5-0.3.3.19.jar
2021/10/20 14:42 8,768,876 【前置14】【前置21】Quark-r2.4-319.jar
2021/09/03 15:58 10,313,922 【前置15】【群系】byg-1.3.4.jar
2021/04/09 23:44 328,828 【前置16】【食物】潘马斯农村食物核心pamhc2foodcore-1.16.3-1.0.2.jar
2021/07/06 16:13 1,259,031 【前置17】【食物】FarmersDelight-1.16.5-0.4.5.jar
2021/07/19 16:53 167,613 【前置18】【食物】simplytea-1.16.5-2.4.0.jar
2021/06/20 16:17 912,234 【前置19】rhino-1605.1.1-build.23.jar
2021/07/19 19:35 1,337,675 【前置20】cloth-config-4.11.26-forge.jar
2021/07/19 19:19 57,279 【前置21】AutoRegLib-1.6-49.jar
2021/07/19 21:41 3,374,203 【前置22】geckolib-forge-1.16.5-3.0.41.jar
2021/08/29 21:25 1,470,868 【前置23】【杂项】血月丰收月enhancedcelestials-2.0.6-1.16.5.jar
2021/09/03 16:03 253,717 【前置25.1】(25取其一)【辅助】1高亮显示Jade-1.16.4-2.7.4.jar
2021/07/20 19:49 61,910 【前置27】bgcore-1.16.5-3.2.jar
2021/07/20 19:41 309,330 【前置28】Bookshelf-1.16.5-10.1.11.jar
2021/07/20 19:38 714,054 【前置29】Mantle-1.16.5-1.6.115.jar
2021/07/19 18:15 501,225 【前置2】architectury-1.20.28-forge.jar
2021/07/20 19:37 6,638,824 【前置30】kotlinforforge-1.14.0-obf.jar
2021/07/06 12:18 105,282 【前置31】morevanillalib-1.16.4-1.4.0.jar
2021/06/04 22:42 260,027 【前置32】structure_gel-1.16.5-1.7.7.jar
2021/06/05 02:28 32,203 【前置33】SimpleCoreLib-1.16.5-2.0.7.5.jar
2021/04/27 10:48 1,067,855 【前置36】附魔前置cofh_core-1.16.4-1.2.1.jar
2021/09/13 00:35 140,636 【前置37】collective-1.16.5-2.64.jar
2021/07/20 23:13 140,070 【前置38】Placebo-1.16.4-4.5.0.jar
2021/07/20 23:18 208,147 【前置39】selene-1.16.5-1.5.jar
2021/09/03 15:54 106,044 【前置3】YungsApi-1.16.4-Forge-12.jar
2021/09/04 22:58 125,835 【前置40】valhelsia_core-16.0.10.jar
2021/07/19 18:14 740,946 【前置41】【辅助】【前置19】或【前置2】添加合成表kubejs-forge-1605.3.12-build.38.jar
2021/08/17 17:04 509,849 【前置42】Penguin-Lib-1.16.5-0.4.3.jar
2021/08/17 13:42 395,978 【前置43】shetiphiancore-1.16-3.8.5.jar
2021/08/29 21:43 88,373 【前置44】majrusz-library-1.16.4-2.0.1.jar
2021/08/29 20:46 150,833 【前置4】cavebiomeapi-1.16.5-1.3.7.jar
2021/07/19 15:12 631,288 【前置5】CreativeCore_v2.2.0_mc1.16.5.jar
2021/06/04 21:05 2,660,414 【前置6】【杂项】charm-forge-1.16.5-2.3.2.jar
2021/08/29 21:52 482,439 【前置7】citadel-1.8.1-1.16.5.jar
2021/06/04 19:07 102,333 【前置8】cuneiform-1.16.3-1.2.5.jar
2021/07/20 15:08 244,720 【前置9】饰品栏curios-forge-1.16.5-4.0.5.2.jar
2021/07/21 14:07 8,013 【前置】全局数据包globaldataandresourcepacks-1.16.4-1.7.4.jar
2021/06/04 22:37 2,004,590 【杂项】[NNOW]NeverNeededOrWanted-1.16.5-1.0.9a.jar
2021/07/19 17:22 538,708 【杂项】【前置01】extra_boats-1.16.5-2.1.0.jar
2021/07/19 18:27 288,116 【杂项】【前置01】动作personality-1.16.5-1.0.2.jar
2021/06/04 22:28 962,042 【杂项】【前置01】残暴与掠夺savageandravage-1.16.5-3.1.0.jar
2021/07/19 17:23 3,009,108 【杂项】【前置01】甜浆果优化berry_good-1.16.5-4.1.1.jar
2021/07/23 18:01 1,896 【杂项】【前置14】夸克奇思妙想QuarkOddities-1.16.3.jar
2021/07/19 16:51 22,188 【杂项】【前置17】农夫乐事兼容性compats_farmersdelightintegrations-1.16.5-1.1.jar
2021/07/19 16:53 3,063 【杂项】【前置17】农夫乐事兼容性farmersdelightintegration-1.16.5-1.0.3.jar
2021/07/19 16:54 260,586 【杂项】【前置17】农夫乐事铜锅copperpot-1.16.5-1.1.1.jar
2021/06/05 02:28 321,605 【杂项】【前置33】矿石SimpleOres2-1.16.5-2.4.6.7.jar
2021/09/21 01:42 12,082 【杂项】【前置37】围火无怪nohostilesaroundcampfire_1.16.5-3.6.jar
2021/07/20 22:17 9,491 【杂项】【前置37】治疗篝火healingcampfire_1.16.5-3.3.jar
2021/04/11 15:24 32,462 【杂项】【前置38】末影袋(提升大量储存空间)EnderBags-1.16.4-6.3.1.jar
2021/07/20 17:34 28,216 【杂项】【前置3】群系标题yung_TravelersTitles-1.16.4-1.3.jar
2021/07/19 15:14 47,260 【杂项】【前置5】物理掉落物ItemPhysic_v1.4.18_mc1.16.5.jar
2021/07/20 15:04 67,143 【杂项】【前置9】【前置24】潜影贝栏位curiousshulkerboxes-forge-1.16.5-4.0.1.0.jar
2021/07/20 15:10 27,890 【杂项】【前置9】不死图腾栏位curioofundying-forge-1.16.5-5.2.0.0.jar
2021/04/27 08:30 494,228 【杂项】储物抽屉StorageDrawers-1.16.3-8.2.2.jar
2021/05/04 08:31 9,772 【杂项】农田不再被踩坏.jar
2021/04/24 04:44 2,040,762 【杂项】幻梦eidolon-0.2.7.jar
2021/07/20 22:53 193,910 【杂项】建筑权杖constructionwand-1.16.5-2.2.jar
2021/06/04 22:44 1,486,283 【杂项】德鲁伊工艺Druidcraft-1.16.5-0.4.52.jar
2021/04/09 23:42 18,175 【杂项】快速树叶腐烂FastLeafDecay-v25.jar
2021/06/08 00:35 312,299 【杂项】旅行背包TravelersBackpack-1.16.5-5.4.2.jar
2021/04/25 03:41 40,702 【杂项】晃动镜头.jar
2021/06/05 00:31 560,732 【杂项】更多洞穴特征extcaves.jar
2021/07/20 17:29 1,402,482 【杂项】更好的洞穴yung_BetterCaves-Forge-1.16.4-1.1.2.jar
2021/07/24 18:19 4,903 【杂项】村庄出生点villagespawnpoint_1.16.5-1.6.jar
2021/09/12 04:01 11,857 【杂项】村民名称villagernames_1.16.5-3.3.jar
2021/08/17 17:07 2,661 【杂项】白天睡觉插件Daydreamer-1.16.5-1.0.jar
2021/06/05 02:31 133,745 【杂项】稀有精英怪infernalmobs-1.16.2.1.jar
2021/07/20 22:36 378,040 【杂项】荒野之息Paraglider-1.16.5-1.3.2.0-beta.4.jar
2021/08/30 00:16 11,191 【杂项】龙栖生成管理wyrmroostspawncontrol-0.1.2.jar
2021/04/25 08:54 112,845 【杂项】(再也不用经验修补了)维修箱子RepairChests-1.16.5-1.7.jar
2021/08/29 21:07 18,109,537 【生物】alexsmobs-1.12.0.jar
2021/08/29 21:07 21,314,646 【生物】iceandfire-2.1.9-1.16.5.jar.disabled
2021/07/20 21:55 5,522,069 【生物】mowziesmobs-1.5.19.jar
2021/09/05 02:30 1,271,721 【生物】Wilds+Version+2.2.1.jar
2021/07/21 13:20 2,970,312 【生物】Zonko’s+Monsters+1.16.5+1.2.jar
2021/07/19 17:23 841,753 【生物】【前置01】buzzier_bees-1.16.5-3.0.1.jar
2021/06/04 18:57 11,003,946 【生物】【前置01】endergetic-1.16.4-3.0.0.jar
2021/06/04 20:58 3,668,858 【生物】【前置01】碧海新生upgrade_aquatic-1.16.5-3.1.0.jar
2021/07/21 14:07 963,433 【生物】【前置22】生物与怪物CNB-1.16.3_5-1.2.11.jar
2021/06/04 22:35 5,428,670 【生物】【前置32】更多末影人farlanders-1.16.4-1.3.9.jar
2021/08/17 16:57 447,935 【生物】【前置42】鱼Piscary-1.16.5-1.0.3.jar
2021/08/29 21:22 658,320 【生物】【前置44】难度渐进(宝藏袋)majruszs-difficulty-1.16.4-1.1.0.jar
2021/10/22 13:54 4,590,562 【生物】厄运(地狱恶魔)MCDoom-1.16.5-4.0.26.jar
2021/06/04 22:26 1,289,476 【生物】变异生物MutantBeasts-1.16.4-1.1.3.jar
2021/09/03 16:23 7,681,362 【生物】古老水生物OddWaterMobs[1.16.5]_1.4.0.jar
2021/07/20 16:23 845,975 【生物】地下城怪物dungeons_mobs-1.16.5-1.0.5.jar
2021/08/29 20:57 8,878,253 【生物】外来物种Exotic+Critters+1.16+Experimental+1.14.1.jar
2021/08/29 21:06 511,424 【生物】寂静岭Silent+Mine+1.16.5+0.1.jar
2021/09/03 21:10 88,425,620 【生物】恐怖生物lycanitesmobs-1.16.5-2.3.2.2.jar.disabled
2021/07/21 17:55 1,225,543 【生物】无名生物(优质无汉化)unnamedanimalmod-1.0.2.jar
2021/07/20 16:51 14,493,152 【生物】更多下界生物infernal-expansion-2.0.0-beta.7.jar
2021/07/06 10:33 1,102,070 【生物】更多傀儡extragolems-11.3.1.jar
2021/08/29 21:13 10,032,735 【生物】更多僵尸UNDEADv.1.1release.jar
2021/08/29 21:14 1,743,711 【生物】更多挑战DungeonsMod-1.16.3-1.4.40.jar
2021/07/21 14:06 259,576 【生物】更多职业村民morevillagers-FORGE-1.16.5-1.5.3.jar
2021/07/20 19:50 308,282 【生物】更多骷髅bones-1.16.5-2.1.0.jar
2021/04/24 05:02 8,356,809 【生物】更好动物betteranimalsplus#-1.16.5-10.2.0.jar
2021/07/19 19:05 382,707 【生物】末地重生EndReborn+[0.8.4].jar
2021/09/05 16:27 190,249 【生物】村民护卫guardvillagers-1.16.5.1.2.6.jar
2021/09/25 19:09 551,025 【生物】水产养殖Aquaculture-1.16.5-2.1.21.jar
2021/07/19 16:25 235,050 【生物】海洋生物risingtides-1.16.5-1.3.0.jar
2021/06/04 22:21 1,454,383 【生物】潘多拉的生物pandoras_creatures-1.16.3-2.0.1.jar
2021/07/21 14:07 427,537 【生物】灾祸村民illagers_plus-1.16.4v1.5.jar
2021/04/09 22:46 2,044,414 【生物】珍奇鸟类exoticbirds-1.16.4-1.1.0.jar
2021/06/04 22:44 466,557 【生物】落选生物outvoted-1.16.5-1.2.4.jar
2021/09/18 22:22 9,275,633 【生物】阿斯特米尔的森林(地狱门与钓鱼方式改变)astemir_forestcraft-1.599.jar
2021/07/06 10:33 327,809 【生物】附魔师enchantwithmob-1.16.5-1.4.6.jar
2021/08/29 21:30 274,624 【生物】非虔诚Impish+Tome+(1.16.5_ver.1.0.2).jar
2021/08/30 00:25 4,969,566 【生物】龙栖Wyrmroost-1.16.3-1.2.11.jar
2021/07/21 14:07 389,176 【结构】 【前置32】更多地牢dungeons_plus-1.16.5-1.1.5.jar
2021/10/22 13:45 756,298 【结构】DungeonCrawl-1.16.5-2.3.2.jar
2021/10/22 13:44 590,639 【结构】StructuresPlusEnd.jar
2021/09/03 15:54 509,890 【结构】yung_BetterDungeons-1.16.4-1.2.jar
2021/07/20 17:24 289,307 【结构】yung_BetterMineshafts-Forge-1.16.4-2.0.4.jar
2021/07/20 17:30 64,256 【结构】【前置3】yung-YungsExtras-Forge-1.16.4-1.0.jar
2021/09/03 15:54 541,396 【结构】【前置3】yung_BetterStrongholds-1.16.4-1.2.1.jar
2021/07/21 14:06 1,537,457 【结构】【前置40】valhelsia_structures-1.16.5-0.1.3.jar
2021/09/03 16:07 1,540,625 【结构】【前置40】valhelsia_structures-1.16.5-0.1.5.jar
2021/09/03 16:26 2,499,542 【结构】中世纪城堡MedievalCraft-1.16.5-1.15.11.jar
2021/06/17 01:05 85,877 【结构】刷怪castle_dungeons-2.3-1.16.5-forge.jar
2021/07/20 21:29 4,676,349 【结构】地下城DungeonsArise-1.16.5-2.1.47-release.jar
2021/06/17 01:03 218,290 【结构】地下村庄stoneholm-1.2.2.jar
2021/09/05 02:31 22,253 【结构】地下群系Below+1.0+Forge.jar
2021/09/05 16:28 1,061,118 【结构】坚毅堡垒stalwart-dungeons-1.16.5-1.1.3.jar
2021/06/29 16:58 915,982 【结构】大型结构Shrines-1.16.5-1.8.1.jar
2021/04/20 20:54 157,181 【结构】旷野塔towers_of_the_wild-1.16.4-2.0.1.jar
2021/09/05 00:12 5,240,491 【结构】更多结构repurposed_structures_forge-3.2.4+1.16.5.jar
2021/10/22 13:45 141,714 【结构】沙漠下界元素NMN_1.16.5_v0.1.jar
2021/09/18 02:46 781,636 【结构】遗迹relics-0.2.9.jar
2021/10/22 13:44 281,735 【结构】(墙壁宝石快)Forgotten+Treasures+V12+1.16.5.jar
2021/06/04 22:35 1,288,335 【群系】BetterDefaultBiomes-1.16.4+-Alpha+2.5.3.jar
2021/06/04 19:41 70,790,929 【群系】betterendforge-1.16.4-1.6.0.jar
2021/07/19 16:20 3,651,050 【群系】BOP_BiomesOPlenty-1.16.5-13.1.0.480-universal.jar
2021/07/21 14:07 4,751,584 【群系】Spheric 1.0.3 1.16.5.jar
2021/07/21 14:09 57,325,484 【群系】【前置01】末地OuterEnd-0.2.13.jar
2021/06/04 20:58 961,236 【群系】【前置01】秋原autumnity-1.16.5-2.1.1.jar
2021/04/24 04:00 9,049,133 【群系】【前置01】自然环境(有生物)environmental-1.16.5-1.0.0.jar
2021/07/19 17:16 665,178 【群系】【前置01】薰衣草Abundance-1.16.5-1.0.5.jar
2021/07/19 17:31 1,527,658 【群系】【前置01】雨林沙丘atmospheric-1.16.5-3.1.0.jar
2021/09/03 16:02 365,168 【群系】【前置13】【前置12】mysticalbiomes-1.16.5-0.0.0.5.jar
2021/07/19 21:30 305,286 【群系】【前置22】无尽海洋endless_oceans-1.0.5-forge.jar
2021/06/04 22:26 471,619 【群系】【前置4】【前置27】岩石DarkerDepths-1.16.5-1.0.1.jar
2021/09/03 16:22 461,928 【群系】地狱生物ShretNether+-+Release+-1.3.2.jar
2021/07/19 15:44 280,211 【群系】彩色世界MysticsBiomes-1.16.4-1.1.0.jar
2021/07/21 14:07 2,365,497 【群系】恶地改造Betterlands-1.16.5-0.5.0.jar
2021/07/19 21:50 1,238,112 【群系】探险者explorercraft-5.0.4.jar
2021/09/18 22:32 22,419,768 【群系】更好地狱BetterNetherReforged_Pr1.jar
2021/07/19 14:45 554,081 【群系】河口群系Bayou-Blues-1.16.5-1.0.5.jar
2021/07/21 14:06 1,700,785 【群系】灰烬之地Desolation 1.1.0-1 1.16.5.jar
2021/09/05 00:01 7,273,457 【群系】舒适下界ComfortableNether4.9.jar
2021/07/19 15:22 464,318 【装备】【前置9】【前置11】奇异饰品Artifacts-1.16.5-2.10.0.jar
2021/05/24 21:50 327,436 【装备】【前置9】泰拉瑞亚更多饰品curioBountiful+Baubles+FORGE-1.16.3-0.0.2.jar
2021/07/20 15:10 30,293 【装备】【前置9】经验护符CrimsonXP-1.1.1.jar
2021/07/19 12:54 770,079 【装备】升级下界合金装备Upgraded+Netherite+1.16.5+-+1.9.13.jar
2021/07/06 10:33 2,049,774 【装备】地下城装备dungeons_gear-1.16.5-3.0.17.jar
2021/07/20 22:43 2,033,912 【装饰】cfm-7.0.0pre22-1.16.3.jar
2021/07/20 17:01 1,462,309 【装饰】【前置29】灵感原版装饰Inspirations-1.16.5-1.2.3.37.jar
2021/07/19 12:49 65,945 【装饰】【前置2】更多竹制品bambooeverything-1.16.5-1.0.0-forge.jar
2021/06/20 18:15 770,081 【装饰】【前置30】更好的树叶Better_Foliage-2.6.5-Forge-1.16.5.jar
2021/07/20 21:51 5,723,810 【装饰】【前置39】supplementaries-1.16.5-0.14.5.jar
2021/08/17 13:36 7,824,319 【装饰】【前置43】地灵云心海树山花terraqueous-1.16-1.7.15.jar
2021/06/04 18:58 954,765 【装饰】【前置8】装饰性环境植物terraincognita-1.16.3-1.6.4.2.jar
2021/07/20 22:38 395,348 【装饰】活力之旅projectvibrantjourneys-1.16.5-3.1.0.jar
2021/07/19 14:47 8,666,985 【装饰】自然装饰Natural+Decor+Mod+1.16+II+V0.21.3.7.jar
2021/04/25 00:11 61,580 【装饰】花finallyfarmabledyes-1.16.4-1.2.0.1.jar
2021/07/20 22:35 280,581 【装饰】花草灌木SereneShrubbery-1.16.5-1.1.0.jar
2021/07/20 22:52 6,132,491 【装饰】(cfm系)morecfm-1.3.1-1.16.3.jar
2021/07/20 23:03 5,398,623 【装饰】(菜篮)NefsMedievalPub+v0.9(1.16.5).jar
2021/08/07 00:01 30,493 【辅助】jei找东西findme-1.16.3-2.2.0.0.jar
2021/04/27 11:23 92,540 【辅助】mod设置GameMenuModOption-1.16.4-1.8.jar
2021/05/03 15:29 792,263 【辅助】Xaeros_Better_PvP_21.8.0_Forge_1.16.5.jar
2021/07/21 14:07 19,362 【辅助】【前置10】jei-professions-1.0.0-1.16.4.jar
2021/04/09 02:10 24,981 【辅助】【前置10】JEI拓展jeiintegration_1.16.5-7.0.1.15.jar
2021/08/29 21:33 235,574 【辅助】【前置10】JEI资源显示JustEnoughResources-1.16.5-0.12.1.128.jar
2021/07/19 15:19 262,656 【辅助】【前置10】拼音搜索JustEnoughCharacters-1.16.4-4.3.0.jar
2021/07/21 14:06 31,243 【辅助】【前置10】附魔信息JEIEnchantmentInfo-1.16.4-1.2.1.jar
2021/04/09 23:51 123,705 【辅助】【前置20】边拿边走InvMove-1.16.3-0.4.6.jar
2021/07/20 16:16 29,421 【辅助】【前置25】12高亮显示扩展WailaHarvestability-mc1.16.x-forge-1.1.15.jar
2021/07/19 15:24 21,734 【辅助】【前置9】盔甲架显示饰品Curious+Armor+Stands-1.16.5-2.1.2.jar
2021/07/17 10:12 483,347 【辅助】世界地图XaerosWorldMap_1.14.6.1_Forge_1.16.5.jar
2021/04/25 03:14 14,660 【辅助】伤害显示TextDamageIndicators-1.16.3-2.0.1.jar
2021/07/30 18:11 460,711 【辅助】回收箱Corail-Recycler-NE-1.16.4-385.jar
2021/04/24 15:37 42,604 【辅助】拾取通知PickUpNotifier-v1.2-1.16.3.jar
2021/07/20 21:23 330,091 【辅助】搬箱子carryon-1.16.5-1.15.5.15.jar
2021/07/19 15:41 86,425 【辅助】时装盔甲架CosmeticArmorReworked-1.16.5-v3a.jar
2021/07/20 23:26 78,198 【辅助】更好的第三人称视角BetterThirdPerson-Forge-1.16.4-1.5.1.jar
2021/07/20 22:24 8,514 【辅助】汉化i18nupdatemod-1.16.5-2.0.2-hotfix-4.jar
2021/04/11 16:07 22,624 【辅助】物品堆叠upsizer-mc1.16.4-6.1.1.jar
2021/09/20 22:39 33,125 【辅助】生物生成管理SpawnBalanceUtility-1.36.0.11.jar
2021/05/04 07:49 22,955 【辅助】穿草swingthroughgrass-1.16.4-1.5.3.jar
2021/09/26 01:06 134,996 【辅助】结构指南针ExplorersCompass-1.16.5-1.1.2-forge.jar
2021/09/26 01:06 203,573 【辅助】群系指南针NaturesCompass-1.16.5-1.9.1-forge.jar
2021/08/02 11:50 46,287 【辅助】饱和度状态栏appleskin-forge-mc1.16.x-2.1.0.jar
2021/04/09 22:58 281,216 【辅助】(区域挖掘)OreExcavation-1.8.157.jar
2021/07/29 18:20 120,959 【辅助】(查看物品是否接触过)travelers_index-1.16.4-1.0.2.jar
2021/07/19 18:27 585,049 【附魔】【前置01】allurement-1.16.5-1.2.0.jar
2021/07/20 15:51 51,875 【附魔】【前置28】附魔描述EnchantmentDescriptions-1.16.5-7.0.14.jar
2021/04/27 10:48 124,792 【附魔】【前置36】更多附魔ensorcellation-1.16.4-1.2.0.jar
2021/07/20 15:48 472,341 【附魔】更多附魔flowingagony-1.16.5-beta-0.4.3.jar
2021/07/20 21:14 136,931 【附魔】更多附魔Unique+Enchantments-1.16.5-2.0.1.jar
2021/07/20 21:14 11,607 【附魔】更多附魔—战斗Unique+Enchantments+Battle-1.16.5-1.0.jar
2021/07/20 21:14 31,406 【附魔】更多附魔工具Unique+Enchantments+Utils-1.16.5-1.3.jar
2021/04/25 04:14 47,064 【附魔】附魔拆解台Disenchanting-forge-1.16.5-1.7.1.jar
2021/07/19 11:38 76,505,060 【音效】【前置5】自然音效AmbientSounds_v3.1.9_mc1.16.5.jar
2021/06/04 21:01 58,565,641 【音效】【前置6】音效charmonium-forge-1.16.5-2.3.2.jar
2021/04/27 09:39 14,853,313 【音效】动态环绕4.26DynamicSurroundings-1.16.4-4.0.4.2.jar
2021/07/19 17:16 937,114 【食物】【前置01】neapolitan-1.16.5-2.1.0.jar
2021/06/04 20:57 487,649 【食物】【前置01】【前置17】A系融合农夫乐事abnormals_delight-1.16.5-1.1.1.jar
2021/04/27 12:06 804,052 【食物】【前置16】潘马斯作物pamhc2crops-1.16.3-1.0.2.jar
2021/04/27 12:17 545,339 【食物】【前置16】潘马斯树木pamhc2trees-1.16.3-1.0.1.jar
2021/04/27 12:18 913,219 【食物】【前置16】潘马斯食物拓展pamhc2foodextended-1.16.3-1.0.2.jar
2021/07/19 16:52 14,411 【食物】【前置17】【前置18】farmerstea-1.16.5-1.2.jar
2021/07/19 16:52 107,061 【食物】【前置17】农夫乐事下界扩展nethers_delight-1.1.jar
2021/07/19 16:54 130,982 【食物】【前置17】农夫乐事扩展Farmers_Extra_Foods_1.2.jar
2021/07/19 16:54 182,667 【食物】【前置17】(巨多联动)农夫乐事非正规厨师irregularchef-1.16.5-1.0.0.jar
2021/08/17 17:07 496,315 【食物】【前置42】Horticulture-1.16.5-1.0.2.jar
2021/07/20 23:03 682,828 【食物】懒人厨房CookingForBlockheads_1.16.5-9.3.3.jar