小编Bv2*_*202的帖子

Java多人游戏 - 网络概念

对于一个学校项目,我们应该用Java创建一个多人游戏(它应该是客户端/服务器),可以通过互联网播放(我们在学校编程,所以这不是功课).游戏是回合制的,但应该有一个聊天,其中的一个是实时的.但是,我们都没有网络编程的经验,我读的越多,我似乎就越有问题.

我的第一个想法是使用套接字API来实现多人游戏部分.服务器等待来自客户端的新数据.但是,有多种数据需要接收,如聊天消息,移动等.此外,一旦与服务器建立连接,就应该发送一些初始数据(如播放器的名称).服务器应该能够看到它收到了什么样的消息,但是如何?我在考虑Message用字符串字段创建一个类type.但在我的服务器代码中,我会得到这样的代码:

if (message.type.equals("message")) {
  // code to execute for chat messages
} else if (message.type.equals("movement")) {
  // code to execute for movement
} else if () {
  // ...
} else {
  // ...
} // Please ignore syntax errors :P
Run Code Online (Sandbox Code Playgroud)

当有许多不同类型的数据要发送(并且会有)时,这看起来不是最有效的方式.此外,这意味着服务器和客户端都应具有此Message-class/interface(重复代码).

其他游戏的东西怎么样?例如,玩家1将他的角色移动到击败另一个角色的位置.玩家1的客户计算此失败并应用正确的动作.但应该发送什么到服务器?只是新的球员位置还是失败?使用第一个选项,这意味着所有其他客户端都应该进行计算.这不会导致任何麻烦吗?由于我没有先前的网络编程经验,我对如何做所有这些事情感到有点困惑.

我还在Stackoverflow上的另一个线程中读到RMI可能是更好的选择.阅读了一些有关这方面的信息,我明白了RMI是什么,但我仍然无法看到它是否是这个项目的好选择.有什么提示吗?

如你所见,我对如何开始这个项目的网络部分感到有点困惑.我搜索了一些游戏编程书籍(Java forcourse),但没有一本专注于网络部分.我也搜索过Java网络书籍,但这些书籍似乎都集中在技术上,而不是优秀的代码实践上.

如果有人知道一本好书或者在正确的情况下有一些建议,我们将不胜感激.

谢谢

java sockets networking rmi

7
推荐指数
1
解决办法
1万
查看次数

JTextPane明文

我正在尝试从JTextPane中删除所有文本.我以为你可以简单地使用:

textPane.setText(""); 
Run Code Online (Sandbox Code Playgroud)

这可以工作,但由于某种原因,在调用该方法后总是有一个空行.为什么这样,我该如何防止这种情况?

java swing jtextpane

6
推荐指数
1
解决办法
1万
查看次数

LINQ未正确执行

我有这段代码:

DataTable dtDataTable = …;
var rows = dtDataTable.AsEnumerable();
var test = rows.Select(x => x["id"]).Distinct().Count() != rows.Count();
if (test)
{
    MessageBox.Show("test");
    return false;
}
Run Code Online (Sandbox Code Playgroud)

问题:如果test应该为true,则if语句中的代码不会被执行.我似乎无法调试它(它只是继续运行我的代码).

我想这可能都与延迟/立即执行的东西,但我不能找到一个解决方案(我已经尝试添加.ToList()后select话).

有任何想法吗?

c# linq

6
推荐指数
1
解决办法
158
查看次数

Include() 与 Select() 性能

我有一个父实体,具有子实体的导航属性。只要子实体中存在关联记录,父实体就不能被删除。子实体可以包含数十万条记录。

我想知道在实体框架中最有效的做法是什么:

var parentRecord = _context.Where(x => x.Id == request.Id)
                           .Include(x => x.ChildTable)
                           .FirstOrDefault();

// check if parentRecord exists

if (parentRecord.ChildTable.Any()) {
  // cannot remove
}
Run Code Online (Sandbox Code Playgroud)

或者

var parentRecord = _context.Where(x => x.Id == request.Id)
                            .Select(x => new {
                                  ParentRecord = x,
                                  HasChildRecords = x.ChildTable.Any()
                            })
                           .FirstOrDefault();

// check if parentRecord exists

if (parentRecord.HasChildRecords) {
  // cannot remove
}
Run Code Online (Sandbox Code Playgroud)

第一个查询可能包含数千条记录,而第二个查询则不会,但是第二个查询更复杂。

哪种方法最好?

c# entity-framework

6
推荐指数
1
解决办法
3892
查看次数

Java Swing JLabel,HTML和自定义字体

在我们的Java Swing应用程序中,我们正在加载自定义字体并将其添加到JLabel:

try {
  this.font = Font.createFont(Font.TRUETYPE_FONT, new File("resources/fonts/ourcoolfont.ttf")).deriveFont(16f);
} catch (Exception e) {
  this.font = new Font("Arial", Font.PLAIN, 16);
}
this.label.setFont(this.font);
Run Code Online (Sandbox Code Playgroud)

在3种不同的系统上轻松完美.直到有人试图运行它.字体被加载(因为我们也在其他一些Swing元素上使用),但没有使用JLabel.

经过一番搜索,我发现你不能同时使用HTML和加载的字体.由于某些原因,它适用于我的系统(我认为它与Java版本有关),但不适用于其他一些系统.由于我们希望项目在过时的Java版本中工作,因此只是要求更新不是一种选择.

一种选择是在计算机上安装字体,这是我们不喜欢做的事情.我发现的最佳解决方案是: 如何创建既有样式又有自定义字体的Java/Swing文本组件?

但是,这个问题是关于a JTextPane.A JLabel似乎没有getStyledDocument()我可以使用的方法.

有没有办法让我们的字体与JLabel?

html java fonts swing jlabel

5
推荐指数
1
解决办法
3140
查看次数

MVVM - 退出确认

我正在尝试学习MVVM,但还有一些我还不了解的东西.

目前,我有这个事件处理程序:

private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (MessageBox.Show("Are you sure you want to close this application?", "Close??", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No)
    {
        e.Cancel = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

很容易.但是,我想在此应用程序中应用MVVM模式.

我想知道,我是否应该将此逻辑放在ViewModel中而不是直接放在视图代码中?如果是这样,我该怎么做呢?

谢谢

c# wpf mvvm

5
推荐指数
1
解决办法
463
查看次数

Windows - 在创建文件时收到警告

我不确定我问的是否可行,但我想做以下事情:当在某个文件夹(Windows)中创建文件时,我的程序应该响应.我想让Windows在创建文件时调用回调方法.

另一种选择当然只是使用循环并不断检查文件夹中是否有新文件,但我想立即知道它,因此回调方法会更有效率.

这可能吗?虽然Java是首选,但语言并不重要.

java windows

5
推荐指数
1
解决办法
111
查看次数

$ http.delete返回错误而没有信息

我对AngularJS和REST Web服务有一个奇怪的问题.这是我的代码:

$http.delete(appSettings['baseUrl'] + 'pricelistitem/' + article.itemNumber + '/' + article.acc)
                    .error(function(e) {
                        console.log(e);
                    });
Run Code Online (Sandbox Code Playgroud)

调用它时,我收到错误并.error执行,但e对象是null.

在控制台中,我收到此错误:

XMLHttpRequest cannot load <url>. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5000' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

在邮递员中执行DELETE请求时(我的代码调用了同一个),我在响应中得到了这些标题:

Access-Control-Allow-Methods ? GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin ? *
Content-Length ? 2
Content-Type ? application/json
Date ? Fri, 29 May 2015 06:26:00 GMT
X-Powered-By ? IBM i
Run Code Online (Sandbox Code Playgroud)

我会说这些标题是正确的,我不应该得到这个错误.即使我这样做,错误对象也是null,因此根本没有显示任何信息.

更新15/06:尝试使用PUT和DELETE时都会出现此问题.POST和GET工作正常.在Chrome开发工具的网络标签中,我只能看到OPTIONS请求.在此请求中,Access-Control-Allow-Methods即使在配置Apache配置以在每个响应中包含此标头之后,也不存在(但在Postman中测试时它在PUT/DELETE中).

我已经在这个问题上工作了几个小时没有任何结果.

什么可能导致这个问题?OPTIONS请求是否还需要返回Access-Control-Allow-Origin标头?

任何建议将不胜感激!

javascript http angularjs

5
推荐指数
1
解决办法
351
查看次数

C#执行switch语句中的所有情况

我有一个如下所示的switch语句:

switch(task)
    {
        case 1:
            print();
            break;
        case 2:
            save();
            break;
        case 3:
            sendmail();
            break;
    }
Run Code Online (Sandbox Code Playgroud)

我需要一种方法来执行所有情况,这意味着如果任务是(全部)我想打印,保存和发送邮件.是否可以在给定的情况下使用一些修改我知道,我可以如下:

case All:
    print();
    save();
    sendmail();
    break;
Run Code Online (Sandbox Code Playgroud)

但正如我所说,我想知道,如果在switch语句中有一种方法可以执行所有情况.提前致谢

c# loops case switch-statement

5
推荐指数
2
解决办法
2240
查看次数

字符串连接不可能?

所以在过去的两个小时里,我一直在努力为所有用户填充一个组合框.我设法在组合框中获得所有的名字,但我想在组合框中使用它们的全名.没问题,你会想到,只是连接名称,你就完成了.+和<<应该是连接运算符来执行此操作.所以这是我的代码:

<%= collection_select(:user, :user_id, @users, :user_id, :user_firstname + :user_lastname, {:prompt => false}) %>
Run Code Online (Sandbox Code Playgroud)

但似乎RoR不接受这个:

undefined method `+' for :user_firstname:Symbol
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

ruby ruby-on-rails

4
推荐指数
1
解决办法
6315
查看次数