提交 c83ebd6e 编写于 作者: W wizardforcel

2020-06-21 10:53:37

上级 01f48c84
......@@ -67,7 +67,7 @@ grid .fr.erButton
```
我们创建一个错误按钮,它调用 onError 过程。 在方法内部,我们显示错误消息对话框。 该按钮将放置在网格的第一个单元格中。 `ttk`名称空间内的小部件为主题。 就功能而言,`button``ttk::button`是相同的按钮。 不同之处在于我们可以将主题应用于后者。
我们创建一个错误按钮,它调用`onError`过程。 在方法内部,我们显示错误消息对话框。 该按钮将放置在网格的第一个单元格中。 `ttk`名称空间内的小部件为主题。 就功能而言,`button``ttk::button`是相同的按钮。 不同之处在于我们可以将主题应用于后者。
```
proc onError {} {
......@@ -214,7 +214,7 @@ proc onSelect { label } {
```
我们使用`tk_getOpenFile`命令显示对话框。 我们使用`-filetypes`选项应用文件过滤器。 所选文件名存储在 file 变量中。 `configure`命令用于更改标签的文本。
我们使用`tk_getOpenFile`命令显示对话框。 我们使用`-filetypes`选项应用文件过滤器。 所选文件名存储在`file`变量中。 `configure`命令用于更改标签的文本。
![tk_getOpenFile](img/4ad3eb6d018392a91ed9b981e768f262.jpg)
......
# Nibbles
# 贪食蛇
> 原文: [http://zetcode.com/gui/tcltktutorial/nibbles/](http://zetcode.com/gui/tcltktutorial/nibbles/)
在 Tcl/Tk 教程的这一部分中,我们将创建一个 Nibbles 游戏克隆。
在 Tcl/Tk 教程的这一部分中,我们将创建一个贪食蛇游戏克隆。
Nibbles 是较旧的经典视频游戏。 它最初是在 70 年代后期创建的。 后来它被带到 PC 上。 在这个游戏中,玩家控制蛇。 目的是尽可能多地吃苹果。 蛇每次吃一个苹果,它的身体就会长大。 蛇必须避开墙壁和自己的身体。
贪食蛇是较旧的经典视频游戏。 它最初是在 70 年代后期创建的。 后来它被带到 PC 上。 在这个游戏中,玩家控制蛇。 目的是尽可能多地吃苹果。 蛇每次吃一个苹果,它的身体就会长大。 蛇必须避开墙壁和自己的身体。
## 开发
蛇的每个关节的大小为 10px。 蛇由光标键控制。 最初,蛇具有三个关节。 游戏立即开始。 游戏结束后,我们在窗口中心显示“ Game Over”消息。
蛇的每个关节的大小为 10px。 蛇由光标键控制。 最初,蛇具有三个关节。 游戏立即开始。 游戏结束后,我们在窗口中心显示“`Game Over`”消息。
我们使用`canvas`小部件来创建游戏。 游戏中的对象是图像。 我们使用画布命令创建图像项。 我们使用画布命令使用标签在画布上查找项目并进行碰撞检测。
......@@ -292,7 +292,7 @@ proc createObjects {} {
```
createObjects 过程中,我们在画布上创建游戏对象。 这些是帆布物品。 它们被赋予初始的 x,y 坐标。 `-image`选项提供要显示的图像。 -anchor 选项设置为 nw; 这样,画布项目的坐标就是项目的左上角。 如果我们希望能够在根窗口的边框旁边显示图像,这很重要。 如果您不理解我们的意思,请尝试删除锚点选项。 `-tag`选项用于识别画布上的项目。 一个标签可用于多个画布项目。
`createObjects`过程中,我们在画布上创建游戏对象。 这些是帆布物品。 它们被赋予初始的 x,y 坐标。 `-image`选项提供要显示的图像。 `-anchor`选项设置为`nw`; 这样,画布项目的坐标就是项目的左上角。 如果我们希望能够在根窗口的边框旁边显示图像,这很重要。 如果您不理解我们的意思,请尝试删除锚点选项。 `-tag`选项用于识别画布上的项目。 一个标签可用于多个画布项目。
`checkApple`过程检查蛇是否击中了苹果对象。 如果是这样,我们添加另一个蛇形接头并称为`locateApple`
......@@ -399,7 +399,7 @@ set r [expr round(rand() * $::RAND_POS)]
```
我们得到一个从 0 到 RAND_POS-1 的随机数。
我们得到一个从 0 到`RAND_POS-1`的随机数。
```
set ::apple_x [expr $r * $::DOT_SIZE]
......@@ -408,7 +408,7 @@ set ::apple_y [expr $r * $::DOT_SIZE]
```
这些行设置了 apple 对象的 x,y 坐标。
这些行设置了`apple`对象的 x,y 坐标。
`onKeyPressed`程序中,我们确定所按下的键。
......@@ -425,7 +425,7 @@ if { $a1 && $a2 } {
```
如果按左光标键,则将 left 变量设置为 true。 在`doMove`过程中使用此变量来更改蛇对象的坐标。 还要注意,当蛇向右行驶时,我们不能立即向左转。
如果按左光标键,则将`left`变量设置为`true`。 在`doMove`过程中使用此变量来更改蛇对象的坐标。 还要注意,当蛇向右行驶时,我们不能立即向左转。
```
proc onTimer {} {
......@@ -442,7 +442,7 @@ proc onTimer {} {
```
`DELAY` ms,将调用 onTimer 过程。 如果我们参与了游戏,我们将调用三个构建游戏逻辑的过程。 否则,游戏结束。 计时器基于 after 命令,该命令仅在`DELAY` ms 之后调用一次过程。 要重复调用计时器,我们递归调用`onTimer`过程。
`DELAY` ms,将调用`onTimer`过程。 如果我们参与了游戏,我们将调用三个构建游戏逻辑的过程。 否则,游戏结束。 计时器基于`after`命令,该命令仅在`DELAY` ms 之后调用一次过程。 要重复调用计时器,我们递归调用`onTimer`过程。
```
proc gameOver {} {
......@@ -463,4 +463,4 @@ proc gameOver {} {
Figure: Nibbles
这是用 Tcl/Tk 创建的 Nibbles 电脑游戏。
\ No newline at end of file
这是用 Tcl/Tk 创建的贪食蛇电脑游戏。
\ No newline at end of file
......@@ -27,4 +27,4 @@
## 相关教程和电子书
[Advanced Java Swing 电子书](/ebooks/advancedjavaswing/)[Java Swing 教程](/tutorials/javaswingtutorial/)[JavaFX 教程](/gui/javafx/)[Java 教程](/lang/java/)
\ No newline at end of file
[高级 Java Swing 电子书](/ebooks/advancedjavaswing/)[Java Swing 教程](/tutorials/javaswingtutorial/)[JavaFX 教程](/gui/javafx/)[Java 教程](/lang/java/)
\ No newline at end of file
......@@ -87,7 +87,7 @@ public class CenterWindowEx {
```
本示例在屏幕中央显示一个 250x200 像素的窗口。 在每个 SWT 应用中,都有两个重要的类:`Display``Shell``Display`是 SWT 与基础 OS 之间的连接。 它实现了事件循环并提供了有关操作系统的信息。 `Shell`代表一个窗口。 有顶级的外壳; 这些将`Display`作为父项。 其他外壳称为辅助外壳。
本示例在屏幕中央显示一个`250x200`像素的窗口。 在每个 SWT 应用中,都有两个重要的类:`Display``Shell``Display`是 SWT 与基础 OS 之间的连接。 它实现了事件循环并提供了有关操作系统的信息。 `Shell`代表一个窗口。 有顶级的外壳; 这些将`Display`作为父项。 其他外壳称为辅助外壳。
```
Shell shell = new Shell(display);
......@@ -126,7 +126,7 @@ while (!shell.isDisposed()) {
```
这些行启动事件 mainloop
这些行启动事件主循环
```
Rectangle bds = shell.getDisplay().getBounds();
......@@ -236,7 +236,7 @@ Shell shell = new Shell(display, SWT.SHELL_TRIM | SWT.CENTER);
```
style 参数指定外壳的行为。 传递`SWT.CENTER`选项可使外壳位于窗口的中心。 `SWT.SHELL_TRIM`在窗口上装饰。 它启用标题和标题栏按钮,并使窗口可调整大小。 这是外壳的默认样式。
`style`参数指定外壳的行为。 传递`SWT.CENTER`选项可使外壳位于窗口的中心。 `SWT.SHELL_TRIM`在窗口上装饰。 它启用标题和标题栏按钮,并使窗口可调整大小。 这是外壳的默认样式。
```
shell.setToolTipText("This is a window");
......@@ -373,7 +373,7 @@ quitBtn.addSelectionListener(new SelectionAdapter() {
```
我们为按钮添加一个选择听器。 当我们单击按钮时,将调用`widgetSelected()`方法。 在此方法内部,我们释放 OS 资源并退出应用。
我们为按钮添加一个选择听器。 当我们单击按钮时,将调用`widgetSelected()`方法。 在此方法内部,我们释放 OS 资源并退出应用。
![Quit button](img/c4d1dc44e82b0dec8964ff7a4408fc15.jpg)
......@@ -467,7 +467,7 @@ btn.addListener(SWT.Selection, event -> System.out.println("Button clicked"));
```
激活后,该按钮会将消息打印到控制台。 lambda 表达式用于向按钮添加听器。
激活后,该按钮会将消息打印到控制台。 lambda 表达式用于向按钮添加听器。
目前,有三种激活按钮的方式:单击鼠标左键, `Alt` + `B` 快捷方式以及`空格键` 按钮具有焦点)。
......
......@@ -95,7 +95,7 @@ btn1.setBounds(20, 50, 80, 30);
```
`setBounds()`方法有两件事:将按钮定位在 x = 20 和 y = 50,并将按钮的大小设置为 width = 80 和 height = 30
`setBounds()`方法有两件事:将按钮定位在`x = 20``y = 50`,并将按钮的大小设置为`width = 80``height = 30`
```
button2.setSize(80, 30);
......@@ -482,7 +482,7 @@ FormData cancelData = new FormData(80, 30);
```
取消按钮的大小为 80x30
取消按钮的大小为`80x30`
```
cancelData.right = new FormAttachment(98);
......@@ -978,7 +978,7 @@ btn.setLayoutData(gd);
```
for 循环内,我们创建按钮并将其放入网格中。 通过`widthHint``heightHint`属性,我们可以设置按钮的首选大小。
`for`循环内,我们创建按钮并将其放入网格中。 通过`widthHint``heightHint`属性,我们可以设置按钮的首选大小。
![Calculator skeleton](img/9e487db6a0d1def00b90e87475b13e09.jpg)
......
......@@ -224,7 +224,7 @@ cb.addListener(SWT.Selection, event -> onButtonSelect(cb));
```
我们向按钮的`SWT.Selection`事件类型添加一个听器对象。
我们向按钮的`SWT.Selection`事件类型添加一个听器对象。
```
private void onButtonSelect(Button cb) {
......@@ -348,7 +348,7 @@ spinner.addListener(SWT.Selection, event -> onSelected(spinner));
```
等待微调器选择事件的听器已添加到控件中。 触发事件时,将调用`onSelected()`方法。
等待微调器选择事件的听器已添加到控件中。 触发事件时,将调用`onSelected()`方法。
```
private void onSelected(Spinner spinner) {
......@@ -526,7 +526,7 @@ list.addListener(SWT.Selection, event -> onListItemSelect(list));
```
我们将选择听器添加到`List`小部件。 在列表选择事件中,将调用`onListItemSelect()`方法。
我们将选择听器添加到`List`小部件。 在列表选择事件中,将调用`onListItemSelect()`方法。
```
FormData listData = new FormData();
......@@ -731,7 +731,7 @@ slider.addListener(SWT.Selection, event -> onSelection(slider));
```
听器已添加到滑块小部件。
听器已添加到滑块小部件。
```
int value = slider.getSelection();
......
......@@ -130,7 +130,7 @@ for (int i = 0; i < titles.length; i++) {
```
在此 for 循环中,我们创建表列。 `TableColumn`的实例表示表窗口小部件中的一列。 `setWidth()`设置列的宽度,`setText()`方法设置列的名称。
在此`for`循环中,我们创建表列。 `TableColumn`的实例表示表窗口小部件中的一列。 `setWidth()`设置列的宽度,`setText()`方法设置列的名称。
```
for (int i = 0; i < 15; i++) {
......@@ -356,7 +356,7 @@ table.addListener(SWT.Selection, event -> onTableItemSelected(table));
```
选择听器将添加到表中。 每当选择表格项目时,都会调用`onTableItemSelected()`
选择听器将添加到表中。 每当选择表格项目时,都会调用`onTableItemSelected()`
```
private void onTableItemSelected(Table table) {
......
......@@ -203,7 +203,7 @@ shell.addListener(SWT.Close, event -> doShowMessageBox(event));
```
我们将听器挂钩到`SWT.Close`事件类型。
我们将听器挂钩到`SWT.Close`事件类型。
```
int style = SWT.APPLICATION_MODAL | SWT.ICON_QUESTION | SWT.YES
......@@ -315,7 +315,7 @@ shell.addListener(SWT.MouseDown, event -> onMouseDown());
```
`SWT.MouseDown`事件的鼠标听器添加到外壳中。 当我们在窗口上按下鼠标按钮时,将调用`onMouseDown()`方法。
`SWT.MouseDown`事件的鼠标听器添加到外壳中。 当我们在窗口上按下鼠标按钮时,将调用`onMouseDown()`方法。
```
DirectoryDialog dialog = new DirectoryDialog(shell);
......
......@@ -101,7 +101,7 @@ shell.addListener(SWT.Paint, event -> drawRectangles(event));
```
我们为绘图事件添加了绘图听器。
我们为绘图事件添加了绘图听器。
```
private void drawRectangles(Event e) {
......
......@@ -293,7 +293,7 @@ end
```
我们向按钮添加一个动作监听器。 听器终止应用。
我们向按钮添加一个动作监听器。 听器终止应用。
![Quit button](img/42d3a3d39c91ef8b5a4eb2ff4aaaf461.jpg)
......
......@@ -104,7 +104,7 @@ end
```
在动作听器内部,我们检查标题是否已设置。 如果有标题,我们将其删除。 如果没有标题,我们设置一个。 这样,我们可以切换标题的可见性。
在动作听器内部,我们检查标题是否已设置。 如果有标题,我们将其删除。 如果没有标题,我们设置一个。 这样,我们可以切换标题的可见性。
![JCheckBox](img/9947edf6429f2a1ccfec517d97280b0f.jpg)
......@@ -585,7 +585,7 @@ redButton.addActionListener self
```
我们创建一个`JToggleButton`组件。 我们向按钮添加一个动作监听器。 动作听器是 Example 类。 当我们单击 redButton 时,将调用 Example 类的`actionPerformed`方法。
我们创建一个`JToggleButton`组件。 我们向按钮添加一个动作监听器。 动作听器是 Example 类。 当我们单击 redButton 时,将调用 Example 类的`actionPerformed`方法。
```
blueButton.setMaximumSize greenButton.getMaximumSize
......
......@@ -349,7 +349,7 @@ self.addMouseListener MouseAction.new
```
我们将鼠标侦听器添加到 Example 类。 鼠标侦听器是`MouseAction`用户定义的类,该类继承自`MouseAdapter`。 这是一个便利类,可实现所有五个必需的方法。 方法为空。 除了实现所有五个方法之外,我们仅实现所需的方法。
我们将鼠标监听器添加到 Example 类。 鼠标监听器是`MouseAction`用户定义的类,该类继承自`MouseAdapter`。 这是一个便利类,可实现所有五个必需的方法。 方法为空。 除了实现所有五个方法之外,我们仅实现所需的方法。
```
class MouseAction < MouseAdapter
......
......@@ -566,7 +566,7 @@ showStatusBarMenuItem.addItemListener((e) -> {
```
`JCheckBoxMenuItem`是一种特殊的按钮组件。 它实现了`ItemSelectable`接口。 `ItemListener`可用于听其状态变化。 根据其状态,我们显示或隐藏状态栏。
`JCheckBoxMenuItem`是一种特殊的按钮组件。 它实现了`ItemSelectable`接口。 `ItemListener`可用于听其状态变化。 根据其状态,我们显示或隐藏状态栏。
![JCheckBoxMenuItem](img/e211ea134eb85e2ae2a46461fd57d631.jpg)
......
......@@ -263,7 +263,7 @@ rect.setOnMouseClicked((MouseEvent e) -> {
## 通用处理程序
在下一个示例中,我们创建一个听所有类型事件的通用事件处理程序。
在下一个示例中,我们创建一个听所有类型事件的通用事件处理程序。
`GenericHandlerEx.java`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册