[virtualcommons-svn] commit/foraging: alllee: almost ready.
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-08-17 20:27:20
|
1 new changeset in foraging: http://bitbucket.org/virtualcommons/foraging/changeset/1d4efd66a959/ changeset: 1d4efd66a959 user: alllee date: 2011-08-17 22:27:14 summary: almost ready. affected #: 17 files (4.4 KB) --- a/src/main/java/edu/asu/commons/foraging/client/ChatPanel.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/ChatPanel.java Wed Aug 17 13:27:14 2011 -0700 @@ -112,7 +112,7 @@ private void sendMessage() { String message = chatField.getText(); - // System.err.println("message: " + message); + System.err.println("sending message: " + message); if (message == null || "".equals(message) || targetIdentifier == null) { return; } @@ -134,7 +134,7 @@ private final static String HANDLE_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - private static String[] HANDLES; + private String[] HANDLES; private Identifier clientId; @@ -239,12 +239,17 @@ JScrollPane chatInstructionsScrollPane = new JScrollPane(chatInstructionsPane); chatInstructionsPane.setText(client.getCurrentRoundConfiguration().getChatInstructions()); - add(chatInstructionsScrollPane, BorderLayout.NORTH); +// add(chatInstructionsScrollPane, BorderLayout.NORTH); + add(new JLabel("In round chat"), BorderLayout.NORTH); add(messageScrollPane, BorderLayout.CENTER); add(textEntryPanel, BorderLayout.SOUTH); textEntryPanel.setChatFieldFocus(); } + public void setTextFieldFocus() { + textEntryPanel.setChatFieldFocus(); + } + public TextEntryPanel getTextEntryPanel() { return textEntryPanel; } --- a/src/main/java/edu/asu/commons/foraging/client/ForagingClient.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/ForagingClient.java Wed Aug 17 13:27:14 2011 -0700 @@ -283,7 +283,7 @@ * */ private class MessageQueue implements Runnable { - private final static int DEFAULT_MESSAGES_PER_SECOND = 8; + private final static int DEFAULT_MESSAGES_PER_SECOND = 10; private final LinkedList<Event> actions = new LinkedList<Event>(); @@ -360,6 +360,7 @@ // moveClient(request); transmit(request); } +// Utils.sleep(100); Thread.yield(); } } --- a/src/main/java/edu/asu/commons/foraging/client/GameWindow2D.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/GameWindow2D.java Wed Aug 17 13:27:14 2011 -0700 @@ -25,13 +25,13 @@ import javax.swing.Box; import javax.swing.BoxLayout; +import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextPane; import javax.swing.SwingUtilities; import javax.swing.Timer; -import javax.swing.text.BadLocationException; import javax.swing.text.Style; import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; @@ -55,7 +55,6 @@ import edu.asu.commons.net.Identifier; import edu.asu.commons.util.Duration; import edu.asu.commons.util.HtmlEditorPane; -import javax.swing.JEditorPane; @@ -123,8 +122,8 @@ this.channel = client.getEventChannel(); // feed subject view the available screen size so that // it can adjust appropriately when given a board size - Dimension subjectViewSize = new Dimension((int) Math.floor(size.getWidth()), - (int) Math.floor(size.getHeight() * 0.85)); +// int width = (int) Math.min(Math.floor(size.getWidth()), Math.floor(size.getHeight() * 0.85)); + Dimension subjectViewSize = new Dimension((int) size.getWidth(), (int) (size.getHeight() * 0.85)); subjectView = new SubjectView(subjectViewSize, dataModel); initGuiComponents(); } @@ -405,8 +404,9 @@ private void setInstructions(String s) { instructionsEditorPane.setText(s); instructionsEditorPane.setCaretPosition(0); - repaint(); + instructionsScrollPane.repaint(); instructionsScrollPane.requestFocusInWindow(); +// repaint(); } private HtmlEditorPane createInstructionsEditorPane() { @@ -449,24 +449,24 @@ labelPanel.add(informationLabel); add(labelPanel, BorderLayout.NORTH); - // add message window. - messagePanel = new JPanel(new BorderLayout()); - // messagePanel.setLayout(new BoxLayout(messagePanel, BoxLayout.Y_AXIS)); - messagePanel.add(new JLabel("Messages"), BorderLayout.NORTH); - messageTextPane = new JTextPane(); - messageTextPane.setEditable(false); - messageTextPane.setFont(new Font("arial", Font.BOLD, 12)); - messageTextPane.setBackground(Color.WHITE); - - - addStyles(messageTextPane.getStyledDocument()); - messageScrollPane = new JScrollPane(messageTextPane); - Dimension scrollPaneSize = new Dimension(getPreferredSize().width, 50); - messageScrollPane.setMinimumSize(scrollPaneSize); - messageScrollPane.setPreferredSize(scrollPaneSize); - messageScrollPane.setMaximumSize(scrollPaneSize); - messagePanel.add(messageScrollPane, BorderLayout.CENTER); - add(messagePanel, BorderLayout.SOUTH); +// // add message window. +// messagePanel = new JPanel(new BorderLayout()); +// // messagePanel.setLayout(new BoxLayout(messagePanel, BoxLayout.Y_AXIS)); +// messagePanel.add(new JLabel("Messages"), BorderLayout.NORTH); +// messageTextPane = new JTextPane(); +// messageTextPane.setEditable(false); +// messageTextPane.setFont(new Font("arial", Font.BOLD, 12)); +// messageTextPane.setBackground(Color.WHITE); +// +// +// addStyles(messageTextPane.getStyledDocument()); +// messageScrollPane = new JScrollPane(messageTextPane); +// Dimension scrollPaneSize = new Dimension(getPreferredSize().width, 50); +// messageScrollPane.setMinimumSize(scrollPaneSize); +// messageScrollPane.setPreferredSize(scrollPaneSize); +// messageScrollPane.setMaximumSize(scrollPaneSize); +// messagePanel.add(messageScrollPane, BorderLayout.CENTER); +// add(messagePanel, BorderLayout.SOUTH); addKeyListener( createGameWindowKeyListener() ); addMouseListener(new MouseAdapter() { @@ -479,13 +479,14 @@ addComponentListener(new ComponentAdapter() { public void componentResized(ComponentEvent event) { Component component = event.getComponent(); - // offset by 35 to allow for chat message box + // offset by 35 to allow for message box int subjectViewHeight = component.getHeight() - 35; Dimension size = new Dimension(component.getWidth(), subjectViewHeight); subjectView.setScreenSize(size); subjectView.setImageSizes(); GameWindow2D.this.revalidate(); - GameWindow2D.this.repaint(); + currentCenterComponent.repaint(); +// GameWindow2D.this.repaint(); } }); // add component listeners, chat panel, and sanctioning window IF chat/sanctioning are enabled, and after the end of the round... @@ -557,6 +558,10 @@ } break; // reset token distribution request handling + case KeyEvent.VK_ENTER: + if (dataModel.getRoundConfiguration().isInRoundChatEnabled()) { + getChatPanel().setTextFieldFocus(); + } case KeyEvent.VK_R: if (canResetTokenDistribution()) { event = new ResetTokenDistributionRequest(client.getId()); @@ -608,6 +613,7 @@ } currentCenterComponent = newCenterComponent; revalidate(); + repaint(); } public void startRound() { @@ -629,11 +635,11 @@ if (configuration.isInRoundChatEnabled()) { ChatPanel chatPanel = getChatPanel(); chatPanel.initialize(); - Dimension chatPanelSize = new Dimension(200, getSize().height); + Dimension chatPanelSize = new Dimension(250, getSize().height); chatPanel.setPreferredSize(chatPanelSize); add(chatPanel, BorderLayout.EAST); } - add(messagePanel, BorderLayout.SOUTH); +// add(messagePanel, BorderLayout.SOUTH); addCenterComponent(subjectWindow); requestFocusInWindow(); @@ -652,16 +658,16 @@ public void displayMessage(String errorMessage, Color color) { // String chatHandle = getChatHandle(source); - messageTextPane.setForeground(color); - StyledDocument document = messageTextPane.getStyledDocument(); - try { - document.insertString(document.getLength(), errorMessage + "\n", document.getStyle("bold")); - messageTextPane.setCaretPosition(document.getLength()); - } - catch (BadLocationException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } +// messageTextPane.setForeground(color); +// StyledDocument document = messageTextPane.getStyledDocument(); +// try { +// document.insertString(document.getLength(), errorMessage + "\n", document.getStyle("bold")); +// messageTextPane.setCaretPosition(document.getLength()); +// } +// catch (BadLocationException e) { +// e.printStackTrace(); +// throw new RuntimeException(e); +// } } // FIXME: add to some common GUI package? @@ -701,6 +707,10 @@ double showUpFee = dataModel.getRoundConfiguration().getParentConfiguration().getShowUpPayment(); instructionsBuilder.append(String.format("Your <b>total income</b> so far (including a $%3.2f bonus for showing up) is : $%3.2f<hr>", showUpFee, dataModel.getTotalIncome() + showUpFee)); + for (String trustGameLog: event.getTrustGameLog()) { + instructionsBuilder.append(trustGameLog); + } + if (event.isLastRound()) { instructionsBuilder.append(client.getDataModel().getRoundConfiguration().getLastRoundDebriefing()); timeLeftLabel.setText("The experiment is now over."); @@ -749,18 +759,21 @@ if (roundConfiguration.isTrustGameEnabled()) { JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); - JEditorPane instructionEditorPane = new JEditorPane(); - instructionEditorPane.setContentType("text/html"); - instructionEditorPane.setEditorKit(new HTMLEditorKit()); - instructionEditorPane.setEditable(false); - instructionEditorPane.setBackground(Color.WHITE); - JScrollPane scrollPane = new JScrollPane(instructionEditorPane); - instructionEditorPane.setText(client.getCurrentRoundConfiguration().getTrustGameInstructions()); + JEditorPane trustGameInstructionsEditorPane = new JEditorPane(); + trustGameInstructionsEditorPane.setContentType("text/html"); + trustGameInstructionsEditorPane.setEditorKit(new HTMLEditorKit()); + trustGameInstructionsEditorPane.setEditable(false); + trustGameInstructionsEditorPane.setBackground(Color.WHITE); + JScrollPane scrollPane = new JScrollPane(trustGameInstructionsEditorPane); + trustGameInstructionsEditorPane.setText(client.getCurrentRoundConfiguration().getTrustGameInstructions()); panel.add(scrollPane, BorderLayout.NORTH); TrustGamePanel trustGamePanel = new TrustGamePanel(client); + trustGamePanel.setPreferredSize(new Dimension(300, 400)); panel.add(trustGamePanel, BorderLayout.CENTER); addCenterComponent(panel); + panel.revalidate(); + panel.repaint(); } } @@ -786,10 +799,13 @@ } setInstructions(instructionsBuilder.toString()); + switchInstructionsPane(); } public void switchInstructionsPane() { // instructionsEditorPane.setText("<b>Please wait while we compute your new token totals.</b>"); addCenterComponent(instructionsScrollPane); + revalidate(); + repaint(); } public void displayActiveEnforcementMechanism() { @@ -861,9 +877,13 @@ instructionsEditorPane.setText("Waiting for updated round totals from the server..."); addCenterComponent(instructionsScrollPane); } + if (chatPanel != null) { + remove(chatPanel); + chatPanel = null; + } // generate debriefing text from data culled from the Event addDebriefingText(event); - messageTextPane.setText(""); +// messageTextPane.setText(""); } }; try { @@ -880,7 +900,7 @@ public void run() { ChatPanel chatPanel = getChatPanel(); chatPanel.initialize(); - remove( messagePanel ); +// remove( messagePanel ); addCenterComponent( chatPanel ); startChatTimer(); } --- a/src/main/java/edu/asu/commons/foraging/client/SubjectView.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/SubjectView.java Wed Aug 17 13:27:14 2011 -0700 @@ -70,6 +70,8 @@ * prior to invocation of this method. */ public void setup(RoundConfiguration configuration) { + viewSubjectsField = null; + viewTokensField = null; synchronized (collectedTokens) { collectedTokens.clear(); tokenFieldOfVision = configuration.isTokensFieldOfVisionEnabled(); @@ -150,6 +152,7 @@ int verticalCharacterSpacing = (int) ( (dh - characterHeight) / 2); Point currentPosition = dataModel.getCurrentPosition(); if (subjectFieldOfVision) { + System.err.println("field of vision is set"); // paint a transparent circle centered on the current position of the subject. int radius = viewSubjectsRadius; viewSubjectsField.setCenter(currentPosition); @@ -169,6 +172,7 @@ for (Map.Entry<Identifier, ClientData> entry : positions.entrySet()) { Identifier id = entry.getKey(); Point subjectLocation = entry.getValue().getPosition(); + System.err.println("view subjects field: " + viewSubjectsField); // optimized conditional if (viewSubjectsField == null || id.equals(dataModel.getId()) || viewSubjectsField.contains(subjectLocation)) { // only draw if: --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java Wed Aug 17 13:27:14 2011 -0700 @@ -411,7 +411,7 @@ //Should always return true for 3d experiments public boolean isChatEnabled() { - return ! isPrivateProperty() && getBooleanProperty("chat-enabled"); + return ! isPrivateProperty() && (getBooleanProperty("chat-enabled") || isInRoundChatEnabled()); } public int getMaximumResourceAge() { @@ -557,15 +557,26 @@ instructionsBuilder.append("<hr><b>"); instructionsBuilder.append(getFieldOfVisionInstructions()).append("</b>"); } - if (isChatEnabled()) { + if (isCensoredChat()) { + instructionsBuilder.append("<hr><b>"); + instructionsBuilder.append(getCensoredChatInstructions()).append("</b>"); + } + else if (isInRoundChatEnabled()) { + instructionsBuilder.append("<hr><b>"); + instructionsBuilder.append(getInRoundChatInstructions()).append("</b>"); + } + else if (isChatEnabled()) { instructionsBuilder.append("<hr><b>"); // FIXME: hard-coded, need to make instructions template-able, perhaps // via FreeMarker or Velocity. instructionsBuilder.append("Before the beginning of this round you will be able to chat with the other members of your group for ").append(getChatDuration()).append(" seconds.</b>"); } - if (isCensoredChat()) { - instructionsBuilder.append("<hr><b>"); - instructionsBuilder.append(getCensoredChatInstructions()).append("</b>"); + String resourceGeneratorType = getResourceGeneratorType(); + if (resourceGeneratorType.equals("mobile")) { + instructionsBuilder.append("<hr>").append(getMobileResourceInstructions()); + } + else if (resourceGeneratorType.equals("top-bottom-patchy")) { + instructionsBuilder.append("<hr>").append(getPatchyResourceInstructions()); } // and add the quiz instructions if the quiz is enabled. @@ -575,9 +586,21 @@ } return instructionsBuilder; } + + private String getMobileResourceInstructions() { + return getProperty("mobile-resource-instructions", "The resource can move around in a semblance of free will / agency."); + } + + private String getPatchyResourceInstructions() { + return getProperty("patch-resource-instructiosn", "The resource is not uniformly distributed. There are patches of high growth and low growth."); + } + + private String getInRoundChatInstructions() { + return getProperty("in-round-chat-instructions", "You can chat during this round with all players visible on the screen."); + } public String getTrustGameInstructions() { - return getProperty("trust-game-instructions", "Instructions: You will be randomly matched with another person in your group."); + return getProperty("trust-game-instructions", "You will be randomly matched with another person in your group."); } } --- a/src/main/java/edu/asu/commons/foraging/event/EndRoundEvent.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/event/EndRoundEvent.java Wed Aug 17 13:27:14 2011 -0700 @@ -1,5 +1,6 @@ package edu.asu.commons.foraging.event; +import java.util.List; import java.util.Map; import edu.asu.commons.event.AbstractEvent; @@ -54,6 +55,10 @@ public int getTotalNumberOfTokens() { return clientData.getTotalTokens(); } + + public List<String> getTrustGameLog() { + return clientData.getTrustGameLog(); + } public boolean isLastRound() { return lastRound; --- a/src/main/java/edu/asu/commons/foraging/model/ClientData.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/model/ClientData.java Wed Aug 17 13:27:14 2011 -0700 @@ -5,6 +5,7 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedList; +import java.util.List; import java.util.Queue; import java.util.concurrent.TimeUnit; @@ -590,4 +591,8 @@ public void logTrustGameEarnings(String log) { trustGameLog.add(log); } + + public List<String> getTrustGameLog() { + return trustGameLog; + } } --- a/src/main/java/edu/asu/commons/foraging/model/ResourceDispenser.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/model/ResourceDispenser.java Wed Aug 17 13:27:14 2011 -0700 @@ -90,7 +90,7 @@ } public void initialize(RoundConfiguration roundConfiguration) { - Type resourceGeneratorType = Type.find( roundConfiguration.getResourceGeneratorType() ); + ResourceDispenser.Type resourceGeneratorType = ResourceDispenser.Type.find( roundConfiguration.getResourceGeneratorType() ); currentResourceGenerator = getResourceGenerator( resourceGeneratorType ); currentResourceGenerator.initialize(roundConfiguration); } --- a/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/model/ServerDataModel.java Wed Aug 17 13:27:14 2011 -0700 @@ -397,10 +397,15 @@ } public void calculateTrustGame(ClientData playerOne, ClientData playerTwo) { + if (playerOne.getId().equals(playerTwo.getId())) { + logger.warning("Tried to calculate trust game with self, aborting"); + return; + } double p1AmountToKeep = playerOne.getTrustGamePlayerOneAmountToKeep(); double[] p2AmountsToKeep = playerTwo.getTrustGamePlayerTwoAmountsToKeep(); - double amountSent = 1.0d - p1AmountToKeep; + double amountSent = 1.0d - p1AmountToKeep; + logger.info(String.format("Player one (%s) sent %s", playerOne, amountSent)); if (amountSent > 0) { double p2AmountToKeep = 0.0d; int index = 0; @@ -424,6 +429,12 @@ logger.info(playerTwoLog); playerTwo.logTrustGameEarnings(playerTwoLog); playerTwo.addTrustGameEarnings(p2AmountToKeep); - } + } + else { + String playerOneLog = "Player one " + playerOne + " didn't send any money and kept: " + p1AmountToKeep; + playerOne.logTrustGameEarnings(playerOneLog); + playerOne.addTrustGameEarnings(p1AmountToKeep); + playerTwo.logTrustGameEarnings(playerOneLog + " - you were player two and didn't receive anything."); + } } } --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java Wed Aug 17 13:27:14 2011 -0700 @@ -283,14 +283,13 @@ addEventProcessor(new EventTypeProcessor<ChatRequest>(ChatRequest.class) { public void handle(final ChatRequest request) { RoundConfiguration configuration = getCurrentRoundConfiguration(); + if (! configuration.isChatEnabled()) { + logger.warning("configuration doesn't allow for chat but received " + request); + return; + } if (configuration.isCensoredChat()) { transmit(new FacilitatorCensoredChatRequest(facilitatorId, request)); } - else if (configuration.isInRoundChatEnabled()) { - // FIXME: add configuration parameter for chat in field of vision - - - } else { relayChatRequest(request); } @@ -692,6 +691,7 @@ if (iter.hasNext()) { playerTwo = iter.next(); } + logger.info(String.format("Pairing %s with %s for trust game", playerOne, playerTwo)); serverDataModel.calculateTrustGame(playerOne, playerTwo); } } @@ -746,6 +746,8 @@ // check for field of vision RoundConfiguration currentConfiguration = getCurrentRoundConfiguration(); if (currentConfiguration.isFieldOfVisionEnabled()) { + // FIXME: replace with clientData.getFieldOfVision? + Circle circle = new Circle(clientData.getPosition(), currentConfiguration.getViewSubjectsRadius()); sendChatEvent(request, clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); } @@ -785,6 +787,7 @@ } roundProcessor.execute(); +// Thread.yield(); Utils.sleep(SERVER_SLEEP_INTERVAL); break; case WAITING: --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round0.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round0.xml Wed Aug 17 13:27:14 2011 -0700 @@ -10,7 +10,6 @@ <entry key='tokens-field-of-vision'>true</entry><entry key='subjects-field-of-vision'>true</entry> -<entry key='in-round-chat-enabled'>true</entry><entry key="quiz">true</entry><entry key="q1">C</entry> --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round1.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round1.xml Wed Aug 17 13:27:14 2011 -0700 @@ -8,11 +8,9 @@ <entry key="resource-depth">29</entry><entry key="resource-width">29</entry> -<entry key='tokens-field-of-vision'>true</entry> -<entry key='subjects-field-of-vision'>true</entry> - <entry key='always-explicit'>true</entry><entry key='max-cell-occupancy'>1</entry> +<entry key='in-round-chat-enabled'>true</entry><entry key="instructions"><![CDATA[ @@ -54,19 +52,20 @@ <entry key="chat-instructions"><![CDATA[ <p> -You can now chat with the other participants in your group for 4 minutes -total. During the chat round, you may communicate about any aspect of the -experiment that you would like to discuss with other participants with whom -you have been matched. You may not promise them side-payments after the -experiment is completed or threaten them with any consequence after the -experiment is finished. We are monitoring the chat traffic while you chat. If -we detect that somebody has revealed their identity, we will have to stop the -experiment and remove that person's entire group from the experiment. +You can chat with the other participants in your group during this round. +You may communicate about any aspect of the experiment that you would like to +discuss with other participants with whom you have been matched. You may not promise +them side-payments after the experiment is completed or threaten them with any +consequence after the experiment is finished. We are monitoring the chat traffic +while you chat. If we see that somebody reveals his or her identity, we have to stop +the experiment and remove the whole group from which this person is a member out of +this room. </p><p> -You will see other participants labeled as "1", "2","3", "4", or "5" in the -chat box. You can send a chat message by typing into the textfield at the -bottom of the screen and pressing the "enter" key. </p> +You will see other participants labeled as "1", "2","3", "4", or "5" in the chat +box. You can send a chat message by typing into the textfield and pressing the +enter key. +</p> ]]></entry><entry key='trust-game-instructions'> --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round2.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round2.xml Wed Aug 17 13:27:14 2011 -0700 @@ -17,6 +17,7 @@ <entry key='always-explicit'>true</entry><entry key='max-cell-occupancy'>1</entry> +<entry key='in-round-chat-enabled'>true</entry><entry key="instructions"><![CDATA[ @@ -34,19 +35,20 @@ <entry key="chat-instructions"><![CDATA[ <p> -You can now chat with the other participants in your group for 4 minutes -total. During the chat round, you may communicate about any aspect of the -experiment that you would like to discuss with other participants with whom -you have been matched. You may not promise them side-payments after the -experiment is completed or threaten them with any consequence after the -experiment is finished. We are monitoring the chat traffic while you chat. If -we detect that somebody has revealed their identity, we will have to stop the -experiment and remove that person's entire group from the experiment. +You can chat with the other participants in your group during this round. +You may communicate about any aspect of the experiment that you would like to +discuss with other participants with whom you have been matched. You may not promise +them side-payments after the experiment is completed or threaten them with any +consequence after the experiment is finished. We are monitoring the chat traffic +while you chat. If we see that somebody reveals his or her identity, we have to stop +the experiment and remove the whole group from which this person is a member out of +this room. </p><p> -You will see other participants labeled as "1", "2","3", "4", or "5" in the -chat box. You can send a chat message by typing into the textfield at the -bottom of the screen and pressing the "enter" key. </p> +You will see other participants labeled as "1", "2","3", "4", or "5" in the chat +box. You can send a chat message by typing into the textfield and pressing the +enter key. +</p> ]]></entry><entry key='trust-game-instructions'> --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round3.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round3.xml Wed Aug 17 13:27:14 2011 -0700 @@ -18,12 +18,15 @@ <!-- resource regrowth parameters --><entry key="initial-distribution">.25</entry> +<entry key='resource-generator'>mobile</entry> +<entry key='in-round-chat-enabled'>true</entry> + <entry key="instructions"><![CDATA[ <h3>Round 3 Instructions</h3><hr><p> -Round 3 is the same as round 2. +Round 3 is the same as round 2. Except now the resources move. </p><p> If you have any questions please raise your hand. <b>Do you have any @@ -34,19 +37,20 @@ <entry key="chat-instructions"><![CDATA[ <p> -You can now chat with the other participants in your group for 4 minutes -total. During the chat round, you may communicate about any aspect of the -experiment that you would like to discuss with other participants with whom -you have been matched. You may not promise them side-payments after the -experiment is completed or threaten them with any consequence after the -experiment is finished. We are monitoring the chat traffic while you chat. If -we detect that somebody has revealed their identity, we will have to stop the -experiment and remove that person's entire group from the experiment. +You can chat with the other participants in your group during this round. +You may communicate about any aspect of the experiment that you would like to +discuss with other participants with whom you have been matched. You may not promise +them side-payments after the experiment is completed or threaten them with any +consequence after the experiment is finished. We are monitoring the chat traffic +while you chat. If we see that somebody reveals his or her identity, we have to stop +the experiment and remove the whole group from which this person is a member out of +this room. </p><p> -You will see other participants labeled as "1", "2","3", "4", or "5" in the -chat box. You can send a chat message by typing into the textfield at the -bottom of the screen and pressing the "enter" key. </p> +You will see other participants labeled as "1", "2","3", "4", or "5" in the chat +box. You can send a chat message by typing into the textfield and pressing the +enter key. +</p> ]]></entry><entry key='trust-game-instructions'> --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round4.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round4.xml Wed Aug 17 13:27:14 2011 -0700 @@ -15,14 +15,15 @@ <entry key='always-explicit'>true</entry><entry key='max-cell-occupancy'>1</entry> -<!-- before this round begins, we have a chat session --> -<entry key="chat-enabled">true</entry> +<entry key='in-round-chat-enabled'>true</entry><!-- enable sanctioning --><entry key="sanction-type">real-time</entry><entry key="sanction-cost">1</entry><entry key="sanction-multiplier">2</entry> +<entry key='resource-generator'>top-bottom-patchy</entry> + <entry key="initial-distribution">.25</entry> @@ -41,12 +42,8 @@ Round 4 is the same as the previous two rounds with two exceptions. </p><p> -Before the next round starts you can anonymously communicate by text messages -for four minutes with the other participants in your group. You can use this -opportunity to discuss the experiment and coordinate your actions to improve -your earnings. You may not promise side-payments after the experiment is -completed or make any threats. You are also not allowed to reveal your real -identity. We are monitoring the chat traffic while you chat. +The resource dynamics have changed. One section of the resource has a high growth +rate, and another section has a low growth rate. </p><p> During the next round you will have the option to reduce the earnings of another --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round5.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round5.xml Wed Aug 17 13:27:14 2011 -0700 @@ -16,8 +16,12 @@ <entry key="sanction-type">real-time</entry><entry key="sanction-cost">1</entry><entry key="sanction-multiplier">2</entry> +<!-- before this round begins, we have a chat session --> +<entry key="chat-enabled">true</entry> + <entry key="initial-distribution">.25</entry> +<entry key='resource-generator'>top-bottom-patchy</entry><entry key='always-explicit'>true</entry><entry key='max-cell-occupancy'>1</entry> --- a/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round6.xml Wed Aug 17 10:49:00 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/stationary-limitedvision/round6.xml Wed Aug 17 13:27:14 2011 -0700 @@ -16,6 +16,10 @@ <entry key="sanction-multiplier">2</entry><entry key="initial-distribution">.25</entry> +<entry key='resource-generator'>top-bottom-patchy</entry> +<!-- before this round begins, we have a chat session --> +<entry key="chat-enabled">true</entry> + <entry key='always-explicit'>true</entry><entry key='max-cell-occupancy'>1</entry> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |